From 91531c3eb1dbdc6b36813cbc397748af31d6f576 Mon Sep 17 00:00:00 2001
From: Rob Swindell <rob@synchro.net>
Date: Mon, 15 Feb 2021 18:40:17 -0800
Subject: [PATCH] Resolve more Coverity issues

---
 src/sbbs3/js_socket.c    |  2 +-
 src/sbbs3/js_uifc.c      |  1 +
 src/sbbs3/main.cpp       |  1 +
 src/sbbs3/scfg/scfgnet.c |  2 +-
 src/sbbs3/writemsg.cpp   | 14 ++++++++++++--
 src/xpdev/xpmap.c        |  1 +
 6 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c
index 5d8a0fe501..13a1a42284 100644
--- a/src/sbbs3/js_socket.c
+++ b/src/sbbs3/js_socket.c
@@ -2749,7 +2749,7 @@ js_listening_socket_constructor(JSContext *cx, uintN argc, jsval *arglist)
 	uint16_t port;
 	jsrefcount rc;
 	scfg_t *scfg;
-	struct xpms_set *set;
+	struct xpms_set *set = NULL;
 	struct ls_cb_data cb;
 	jsuint count;
 	int i;
diff --git a/src/sbbs3/js_uifc.c b/src/sbbs3/js_uifc.c
index 67e5762aef..d952aba0ea 100644
--- a/src/sbbs3/js_uifc.c
+++ b/src/sbbs3/js_uifc.c
@@ -854,6 +854,7 @@ js_uifc_list(JSContext *cx, uintN argc, jsval *arglist)
 		return(JS_FALSE);
 	for(; argn<argc; argn++) {
 		if(JSVAL_IS_STRING(argv[argn])) {
+			free(title);
 			JSVALUE_TO_MSTRING(cx, argv[argn], title, NULL);
 			HANDLE_PENDING(cx, title);
 			continue;
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index e27e800598..903155d0d5 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -3522,6 +3522,7 @@ sbbs_t::sbbs_t(ushort node_num, union xp_sockaddr *addr, size_t addr_len, const
     getstr_offset = 0;
     lastnodemsg = 0;
     xtrn_mode = 0;
+	last_ns_time = 0;
 }
 
 //****************************************************************************
diff --git a/src/sbbs3/scfg/scfgnet.c b/src/sbbs3/scfg/scfgnet.c
index 235ce384be..e9a5593be6 100644
--- a/src/sbbs3/scfg/scfgnet.c
+++ b/src/sbbs3/scfg/scfgnet.c
@@ -135,7 +135,7 @@ uint getsub(void)
 		opt[k][0]=0;
 		sprintf(str,"Select %s Sub-board",cfg.grp[i]->sname);
 		j=uifc.list(WIN_RHT|WIN_BOT|WIN_SAV,0,0,45,&sub_dflt,&sub_bar,str,opt);
-		if(j==-1 || j >= cfg.total_subs)
+		if(j==-1 || j >= k)
 			continue;
 		sub_dflt++;
 		sub_bar++;
diff --git a/src/sbbs3/writemsg.cpp b/src/sbbs3/writemsg.cpp
index 6b748a7e09..de2341ec5c 100644
--- a/src/sbbs3/writemsg.cpp
+++ b/src/sbbs3/writemsg.cpp
@@ -632,14 +632,24 @@ bool sbbs_t::writemsg(const char *fname, const char *top, char *subj, long mode,
 			return(false); 
 		}
 		length=(long)filelength(file);
+		if(length < 0) {
+			errormsg(WHERE, ERR_LEN, msgtmp, length);
+			free(buf);
+			return false;
+		}
 		l=strlen((char *)buf);	  /* reserve space for top and terminating null */
 		/* truncate if too big */
 		if(length>(long)((cfg.level_linespermsg[useron_level]*MAX_LINE_LEN)-(l+1))) {
 			length=(cfg.level_linespermsg[useron_level]*MAX_LINE_LEN)-(l+1);
 			bputs(text[OutOfBytes]); 
 		}
-		lread(file,buf+l,length);
+		long rd = read(file,buf+l,length);
 		close(file);
+		if(rd != length) {
+			errormsg(WHERE, ERR_READ, msgtmp, length);
+			free(buf);
+			return false;
+		}
 		// remove(msgtmp); 	   /* no need to save the temp input file */
 		buf[l+length]=0; 
 	}
@@ -845,7 +855,7 @@ void sbbs_t::removeline(char *str, char *str2, char num, char skip)
 		errormsg(WHERE,ERR_ALLOC,str,flen);
 		return; 
 	}
-	if(lread(file,buf,flen)!=flen) {
+	if(read(file,buf,flen)!=flen) {
 		close(file);
 		errormsg(WHERE,ERR_READ,str,flen);
 		free(buf);
diff --git a/src/xpdev/xpmap.c b/src/xpdev/xpmap.c
index 065d583563..51ed6a3cdf 100644
--- a/src/xpdev/xpmap.c
+++ b/src/xpdev/xpmap.c
@@ -133,6 +133,7 @@ struct xpmapping* DLLCALL xpmap(const char *filename, enum xpmap_type type)
 	ret=(struct xpmapping *)malloc(sizeof(struct xpmapping));
 	if(ret==NULL) {
 		CloseHandle(md);
+		UnmapViewOfFile(addr);
 		return NULL;
 	}
 	ret->addr=addr;
-- 
GitLab