Skip to content

Commit 1fc73e7

Browse files
shadowsocksr-libev: add bounds check before memcpy in server.c (#658)
Automated security fix generated by OrbisAI Security
1 parent db195eb commit 1fc73e7

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

shadowsocksr-libev/src/server/server.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ stat_update_cb(EV_P_ ev_timer *watcher, int revents)
175175

176176
memset(&svaddr, 0, sizeof(struct sockaddr_un));
177177
svaddr.sun_family = AF_UNIX;
178-
strncpy(svaddr.sun_path, manager_address, sizeof(svaddr.sun_path) - 1);
178+
snprintf(svaddr.sun_path, sizeof(svaddr.sun_path), "%s", manager_address);
179179

180180
if (sendto(sfd, resp, strlen(resp) + 1, 0, (struct sockaddr *)&svaddr,
181181
sizeof(struct sockaddr_un)) != msgLen) {
@@ -684,6 +684,11 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
684684
if(obfs_compatible == 1)
685685
{
686686
char *back_buf = (char*)malloc(sizeof(buffer_t));
687+
if (back_buf == NULL) {
688+
close_and_free_remote(EV_A_ remote);
689+
close_and_free_server(EV_A_ server);
690+
return;
691+
}
687692
memcpy(back_buf, buf, sizeof(buffer_t));
688693
buf->len = obfs_plugin->server_decode(server->obfs, &buf->array, buf->len, &buf->capacity, &needsendback);
689694

@@ -792,7 +797,11 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
792797

793798
if (server->stage == STAGE_HANDSHAKE) {
794799
size_t header_len = server->header_buf->len;
795-
brealloc(server->header_buf, server->buf->len + header_len, BUF_SIZE);
800+
if (brealloc(server->header_buf, server->buf->len + header_len, BUF_SIZE) != 0) {
801+
close_and_free_remote(EV_A_ remote);
802+
close_and_free_server(EV_A_ server);
803+
return;
804+
}
796805
memcpy(server->header_buf->array + header_len,
797806
server->buf->array, server->buf->len);
798807
server->header_buf->len = server->buf->len + header_len;

0 commit comments

Comments
 (0)