@@ -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