commit 13c742529cbadeeaa6e8a71e4c3bc5e329327941
parent c9b8cefc298d97ecba67def56a375c91485cd92f
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date: Sat, 14 Feb 2015 14:03:41 +0100
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.
Diffstat:
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/socket.c b/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