From 62f781488600b0da5ab2673b82ea8b15171483be Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on Windows 11)" <rob@synchro.net>
Date: Wed, 22 Nov 2023 15:08:13 -0800
Subject: [PATCH] Fix CID 32913

getkeys() could return -1 if user disconnects (and SS_ABORT not set), so this
appears to be a valid bug.
---
 src/sbbs3/useredit.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/sbbs3/useredit.cpp b/src/sbbs3/useredit.cpp
index ace72ef03c..89ab11c6be 100644
--- a/src/sbbs3/useredit.cpp
+++ b/src/sbbs3/useredit.cpp
@@ -243,6 +243,8 @@ void sbbs_t::useredit(int usernumber)
 				while(online) {
 					bprintf(text[FlagEditing], u32toaf(user.exempt,tmp));
 					c=(char)getkeys("ABCDEFGHIJKLMNOPQRSTUVWXYZ?\r",0);
+					if(c < 0)
+						break;
 					if(sys_status&SS_ABORT)
 						break;
 					if(c==CR) break;
@@ -273,6 +275,8 @@ void sbbs_t::useredit(int usernumber)
 							break; 
 					}
 					c=(char)getkeys("ABCDEFGHIJKLMNOPQRSTUVWXYZ?1234\r",0);
+					if(c < 0)
+						break;
 					if(sys_status&SS_ABORT)
 						break;
 					if(c==CR) break;
@@ -522,6 +526,8 @@ void sbbs_t::useredit(int usernumber)
 				while(online) {
 					bprintf(text[FlagEditing], u32toaf(user.rest, tmp));
 					c=(char)getkeys("ABCDEFGHIJKLMNOPQRSTUVWXYZ?\r",0);
+					if(c < 0)
+						break;
 					if(sys_status&SS_ABORT)
 						break;
 					if(c==CR) break;
@@ -1134,6 +1140,8 @@ void sbbs_t::maindflts(user_t* user)
 						strcat(str,tmp); 
 					}
 				ch=(char)getkeys(str,0);
+				if(ch < 0)
+					break;
 				if(sys_status & SS_ABORT)
 					break;
 				if(ch==quit_key())
-- 
GitLab