From 20d3ef1643b2b5ab4ea2bdd115bb025c11fc33b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ayd=C4=B1n=20Mercan?= Date: Thu, 11 Jun 2026 16:38:27 +0300 Subject: [PATCH] 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. --- lib/isc/netmgr/tcp.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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. */