Bläddra i källkod

fix crash on shutdown of compressed connection

the callback may destroy the socket, so it is very unwise to use it for
buffering the return value. use a temporary instead.
Oswald Buddenhagen 10 år sedan
förälder
incheckning
13c742529c
1 ändrade filer med 3 tillägg och 1 borttagningar
  1. 3 1
      src/socket.c

+ 3 - 1
src/socket.c

@@ -627,11 +627,13 @@ socket_fill( conn_t *sock )
 {
 #ifdef HAVE_LIBZ
 	if (sock->in_z) {
+		int ret;
 		/* The timer will preempt reads until the buffer is empty. */
 		assert( !sock->in_z->avail_in );
 		sock->in_z->next_in = (uchar *)sock->z_buf;
-		if ((sock->in_z->avail_in = do_read( sock, sock->z_buf, sizeof(sock->z_buf) )) <= 0)
+		if ((ret = do_read( sock, sock->z_buf, sizeof(sock->z_buf) )) <= 0)
 			return;
+		sock->in_z->avail_in = ret;
 		socket_fill_z( sock );
 	} else
 #endif