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