From: Aydın Mercan Date: Thu, 11 Jun 2026 13:38:27 +0000 (+0300) Subject: ignore 0-byte reads in the TCP read callback X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=20d3ef1643b2b5ab4ea2bdd115bb025c11fc33b0;p=thirdparty%2Fbind9.git ignore 0-byte reads in the TCP read callback Callbacks for libuv stream reads do not signal zero-length reads as a failure signal but rather as EAGAIN/EWOULDBLOCK. This can trigger an assertion when a zero-length read is pushed onto a PROXYv2 endpoint that has not yet processed the headers as it expects a non-NULL region of positive length. --- diff --git a/lib/isc/netmgr/tcp.c b/lib/isc/netmgr/tcp.c index 9d50d98e1a..9ec8a7f3b5 100644 --- a/lib/isc/netmgr/tcp.c +++ b/lib/isc/netmgr/tcp.c @@ -778,7 +778,10 @@ isc__nm_tcp_read_cb(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) { goto free; } - if (nread < 0) { + if (nread == 0) { + /* EAGAIN/EWOULDBLOCK: no data yet, not an error on libuv. */ + goto free; + } else if (nread < 0) { if (nread != UV_EOF) { isc__nm_incstats(sock, STATID_RECVFAIL); } @@ -837,7 +840,7 @@ isc__nm_tcp_read_cb(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) { } free: - if (nread < 0) { + if (nread <= 0) { /* * The buffer may be a null buffer on error. */