From a9d08f99d143f77e0bdafb64b95b71e196485bb1 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Wed, 7 Feb 2018 02:32:06 +0000 Subject: [PATCH] Break the "secure socket" do {} while() loops in js_socket_recv() and js_socket_sendsocket() when the socket has been disconnected. I found a terminal user session on a disconnected socket, in an infinite loop in js_socket_recv(), had performed an https request from AnsiView->http.js. --- src/sbbs3/js_socket.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index d7596b97ea..6163bda959 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -140,8 +140,10 @@ static ptrdiff_t js_socket_recv(js_socket_private_t *p, void *buf, size_t len, i do_js_close(p); return -1; } + if(!socket_check(p->sock,NULL,NULL,0)) + break; } while(len); - return total; // Shouldn't happen... + return total; } static ptrdiff_t js_socket_sendsocket(js_socket_private_t *p, const void *msg, size_t len, int flush) @@ -169,9 +171,11 @@ static ptrdiff_t js_socket_sendsocket(js_socket_private_t *p, const void *msg, s if(flush) do_CryptFlush(p); return total; } + if(!socket_check(p->sock,NULL,NULL,0)) + break; } while(len); if(flush) do_CryptFlush(p); - return total; // shouldn't happen... + return total; } static int js_socket_sendfilesocket(js_socket_private_t *p, int file, off_t *offset, off_t count) -- GitLab