From 7b50f26d94bd4d1d8042a37780bac5e136a8eeab Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Sat, 17 Mar 2018 02:23:33 +0000
Subject: [PATCH] Address coverity-scan reported issues.

---
 src/sbbs3/atcodes.cpp  | 4 +++-
 src/sbbs3/chat.cpp     | 2 +-
 src/sbbs3/echocfg.c    | 1 -
 src/sbbs3/filedat.c    | 7 +++----
 src/sbbs3/scfglib.h    | 1 +
 src/sbbs3/scfglib2.c   | 1 +
 src/sbbs3/services.c   | 1 -
 src/sbbs3/xtrn_sec.cpp | 3 ++-
 8 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/sbbs3/atcodes.cpp b/src/sbbs3/atcodes.cpp
index 77802a6c12..59f43ef825 100644
--- a/src/sbbs3/atcodes.cpp
+++ b/src/sbbs3/atcodes.cpp
@@ -158,7 +158,9 @@ const char* sbbs_t::atcode(char* sp, char* str, size_t maxlen)
 		return(COPYRIGHT_NOTICE);
 
 	if(!strcmp(sp,"COMPILER")) {
-		DESCRIBE_COMPILER(str);
+		char compiler[32];
+		DESCRIBE_COMPILER(compiler);
+		strncpy(str, compiler, maxlen);
 		return(str);
 	}
 
diff --git a/src/sbbs3/chat.cpp b/src/sbbs3/chat.cpp
index 8ea1777fc9..b318cf5027 100644
--- a/src/sbbs3/chat.cpp
+++ b/src/sbbs3/chat.cpp
@@ -582,8 +582,8 @@ bool sbbs_t::guru_page(void)
 		return(false);
 	}
 	if((gurubuf=(char *)malloc((size_t)filelength(file)+1))==NULL) {
-		close(file);
 		errormsg(WHERE,ERR_ALLOC,path,(size_t)filelength(file)+1);
+		close(file);
 		return(false);
 	}
 	read(file,gurubuf,(size_t)filelength(file));
diff --git a/src/sbbs3/echocfg.c b/src/sbbs3/echocfg.c
index 42273f5634..653da33650 100644
--- a/src/sbbs3/echocfg.c
+++ b/src/sbbs3/echocfg.c
@@ -356,7 +356,6 @@ int main(int argc, char **argv)
 			p=getenv("SBBSNODE");
 			if(!p) {
 				goto USAGE;
-				exit(1); 
 			}
 			SAFECOPY(str,p);
 			backslash(str);
diff --git a/src/sbbs3/filedat.c b/src/sbbs3/filedat.c
index e3b9151f05..812ef8e2ec 100644
--- a/src/sbbs3/filedat.c
+++ b/src/sbbs3/filedat.c
@@ -164,7 +164,6 @@ BOOL DLLCALL addfiledat(scfg_t* cfg, file_t* f)
 	uchar	*ixbbuf,idx[3];
     int		i,file;
 	long	l,length;
-	time_t	now;
 	time_t	uldate;
 
 	/************************/
@@ -224,9 +223,9 @@ BOOL DLLCALL addfiledat(scfg_t* cfg, file_t* f)
 	/*******************************************/
 	SAFEPRINTF2(str,"%s%s.dab",cfg->dir[f->dir]->data_dir,cfg->dir[f->dir]->code);
 	if((file=sopen(str,O_WRONLY|O_CREAT|O_BINARY,SH_DENYRW,DEFFILEMODE))!=-1) {
-		now=time(NULL);
-		/* TODO: 32-bit *or* LE required */
-		write(file,&now,4);
+		time32_t now=time32(NULL);
+		/* TODO: LE required */
+		write(file,&now,sizeof(time32_t));
 		close(file); 
 	}
 
diff --git a/src/sbbs3/scfglib.h b/src/sbbs3/scfglib.h
index fd177b7482..7bb82c868e 100644
--- a/src/sbbs3/scfglib.h
+++ b/src/sbbs3/scfglib.h
@@ -43,6 +43,7 @@
 							  offset+=sizeof(var); }
 #define get_str(var,stream) { if(!fread(var,1,sizeof(var),stream)) \
 								memset(var,0,sizeof(var)); \
+ 							  else var[sizeof(var)-1] = 0; \
                               offset+=sizeof(var); }
 
 #ifdef __cplusplus
diff --git a/src/sbbs3/scfglib2.c b/src/sbbs3/scfglib2.c
index 56890fdf7e..80eca877c2 100644
--- a/src/sbbs3/scfglib2.c
+++ b/src/sbbs3/scfglib2.c
@@ -267,6 +267,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error)
 	for(i=0;i<cfg->altpaths;i++) {
 		if(feof(instream)) break;
 		fread(str,LEN_DIR+1,1,instream);
+		str[LEN_DIR] = 0;
 		offset+=LEN_DIR+1;
 		backslash(str);
 		j=LEN_DIR+1;
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 04a9cfd3a6..9ed427a757 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -1584,7 +1584,6 @@ static service_t* read_services_ini(const char* services_ini, service_t* service
 		}
 
 		if((np=(service_t*)realloc(service,sizeof(service_t)*((*services)+1)))==NULL) {
-			fclose(fp);
 			lprintf(LOG_CRIT,"!MALLOC FAILURE");
 			free(default_interfaces);
 			iniFreeStringList(sec_list);
diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp
index 726201dda5..c258f9bc2d 100644
--- a/src/sbbs3/xtrn_sec.cpp
+++ b/src/sbbs3/xtrn_sec.cpp
@@ -989,9 +989,10 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 		i=cfg.level_timepercall[useron.level];	/* Time allowed on */
 		write(file,&i,2);
 
+		c=0;
 		i=0;									/* Allowed K-bytes for D/L */
 		write(file,&i,2);
-		write(file,&i,1);						/* Conference user was in */
+		write(file,&c,1);						/* Conference user was in */
 		write(file,&i,2);						/* Conferences joined */
 		write(file,&i,2);						/* "" */
 		write(file,&i,2);						/* "" */
-- 
GitLab