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.
This commit is contained in:
Oswald Buddenhagen 2015-02-14 14:03:41 +01:00
parent c9b8cefc29
commit 13c742529c

View File

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