From 3cd526411f0a2e1e8e314bc67c19d3b245e6e05a Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 24 Jun 2026 11:31:06 -0700 Subject: [PATCH] rsrv: old TCP client tar pit A short message could underflow, leaving a too old client stuck in a tar pit. An acceptable outcome, but not intended. Instead, send back errors to each message. --- modules/database/src/ioc/rsrv/camessage.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/database/src/ioc/rsrv/camessage.c b/modules/database/src/ioc/rsrv/camessage.c index dc0115ed8..91788626f 100644 --- a/modules/database/src/ioc/rsrv/camessage.c +++ b/modules/database/src/ioc/rsrv/camessage.c @@ -2494,9 +2494,15 @@ int camessage ( struct client *client ) SEND_UNLOCK(client); log_header ( "CAS: Client version too old", client, &msg, 0, nmsg ); - client->recvBytesToDrain = msgsize - bytes_left; - client->recv.stk = client->recv.cnt; - status = RSRV_OK; + if (msgsize >= bytes_left) { + client->recvBytesToDrain = msgsize - bytes_left; + client->recv.stk = client->recv.cnt; + status = RSRV_OK; + break; + } else { // msgsize < bytes_left + client->recv.stk += msgsize; + continue; + } } else { /* silently ignore UDP from old clients */ status = RSRV_ERROR;