diff --git a/src/sbbs3/addfiles.c b/src/sbbs3/addfiles.c
index 73fc9442e922fddcfa83e59b5d9d9ebd3f83cc87..5dabc3ba37fd3d33ad653c5e483a955d496e421c 100644
--- a/src/sbbs3/addfiles.c
+++ b/src/sbbs3/addfiles.c
@@ -1000,7 +1000,7 @@ int main(int argc, char **argv)
 					synclist(str,i);
 				continue;
 			}
-			sprintf(str,"%s%s",scfg.dir[f.dir]->path,auto_name);
+			SAFEPRINTF2(str,"%s%s",scfg.dir[f.dir]->path,auto_name);
 			if(fexistcase(str) && flength(str)>0L) {
 				printf("Auto-adding %s\n",str);
 				addlist(str,f,desc_offset,size_offset);
@@ -1015,7 +1015,7 @@ int main(int argc, char **argv)
 		if(!listgiven && !namegiven) {
 			sprintf(str,"%s%s.lst",scfg.dir[f.dir]->path, scfg.dir[f.dir]->code);
 			if(!fexistcase(str) || flength(str)<=0L)
-				sprintf(str,"%s%s",scfg.dir[f.dir]->path, auto_name);
+				SAFEPRINTF2(str,"%s%s",scfg.dir[f.dir]->path, auto_name);
 			addlist(str,f,desc_offset,size_offset);
 			if(mode&SYNC_LIST)
 				synclist(str,f.dir);
diff --git a/src/sbbs3/allusers.c b/src/sbbs3/allusers.c
index 641f75e8ff1b334c4ed9899a6c3c6b8984feddea..4d5ea513c7fdeaa837321149bf0ae6949b7dae62 100644
--- a/src/sbbs3/allusers.c
+++ b/src/sbbs3/allusers.c
@@ -223,7 +223,7 @@ int main(int argc, char **argv)
 					for(;argv[i][j];j++)
 						if(isalpha(argv[i][j]))
 							flags|=FLAG(toupper(argv[i][j]));
-					sprintf(str,"%suser.dat",dir);
+					SAFEPRINTF(str,"%suser.dat",dir);
 					if(!fexistcase(str) || (file=sopen(str,O_RDWR|O_BINARY,SH_DENYNO))==-1) {
 						printf("Error opening %s\n",str);
 						exit(1); 
@@ -287,7 +287,7 @@ int main(int argc, char **argv)
 					for(;argv[i][j];j++)
 						if(isalpha(argv[i][j]))
 							flags|=FLAG(toupper(argv[i][j]));
-					sprintf(str,"%suser.dat",dir);
+					SAFEPRINTF(str,"%suser.dat",dir);
 					if(!fexistcase(str) || (file=sopen(str,O_RDWR|O_BINARY,SH_DENYNO))==-1) {
 						printf("Error opening %s\n",str);
 						exit(1); 
@@ -342,7 +342,7 @@ int main(int argc, char **argv)
 						j=99;
 					if(j<0)
 						j=0;
-					sprintf(str,"%suser.dat",dir);
+					SAFEPRINTF(str,"%suser.dat",dir);
 					if(!fexistcase(str) || (file=sopen(str,O_RDWR|O_BINARY,SH_DENYNO))==-1) {
 						printf("Error opening %s\n",str);
 						exit(1); 
diff --git a/src/sbbs3/chat.cpp b/src/sbbs3/chat.cpp
index ce9ed96bbc329764c4ff033ccd93a05553b39849..e1d767c5971dbaef3f0afefd293cf4f769bf21fa 100644
--- a/src/sbbs3/chat.cpp
+++ b/src/sbbs3/chat.cpp
@@ -1436,7 +1436,7 @@ void sbbs_t::nodemsg()
 					bprintf("%4s",nulstr);
 					if(!getstr(line,70,K_WRAP|K_MSG))
 						break;
-					sprintf(str,"%4s%s\r\n",nulstr,line);
+					SAFEPRINTF2(str,"%4s%s\r\n",nulstr,line);
 					SAFECAT(buf,str);
 					if(line[0]) {
 						if(i)
diff --git a/src/sbbs3/delfiles.c b/src/sbbs3/delfiles.c
index fd42ce04f0ce4dcfa21823ca2639f5e057c758b8..0aa828d7e546d636a9cc2f7d07a25e1e8c4b0373 100644
--- a/src/sbbs3/delfiles.c
+++ b/src/sbbs3/delfiles.c
@@ -205,7 +205,7 @@ int main(int argc, char **argv)
 
 		if(misc&NO_LINK && cfg.dir[i]->misc&DIR_FCHK) {
 			strcpy(tmp,cfg.dir[i]->path);
-			sprintf(str,"%s*.*",tmp);
+			SAFEPRINTF(str,"%s*.*",tmp);
 			printf("\nSearching %s for unlinked files\n",str);
 			if(!glob(str, GLOB_MARK, NULL, &gl)) {
 				for(j=0; j<(int)gl.gl_pathc; j++) {
@@ -266,7 +266,7 @@ int main(int argc, char **argv)
 			strcpy(workfile.name,fname);
 			unpadfname(workfile.name,fname);
 			workfile.dir=i;
-			sprintf(str,"%s%s"
+			SAFEPRINTF2(str,"%s%s"
 				,workfile.altpath>0 && workfile.altpath<=cfg.altpaths
 					? cfg.altpath[workfile.altpath-1]
 				: cfg.dir[workfile.dir]->path,fname);
diff --git a/src/sbbs3/dstsedit.c b/src/sbbs3/dstsedit.c
index 48cd5afccebe54a56235042e771832e376281be5..18fc8a2785c179497752f2346a001923e6fbdb0f 100644
--- a/src/sbbs3/dstsedit.c
+++ b/src/sbbs3/dstsedit.c
@@ -63,7 +63,7 @@ main(int argc, char **argv)
 	}
 	backslash(path);
 
-	sprintf(str, "%sdsts.dab", path);
+	SAFEPRINTF(str, "%sdsts.dab", path);
 	if ((file = nopen(str, O_RDONLY)) == -1) {
 		printf("Can't open %s\r\n", str);
 		exit(1);
@@ -179,7 +179,7 @@ main(int argc, char **argv)
 				stats.nusers = atoi(str);
 			break;
 		case 'Q':
-			sprintf(str, "%sdsts.dab", path);
+			SAFEPRINTF(str, "%sdsts.dab", path);
 			if ((file = nopen(str, O_WRONLY)) == -1) {
 				printf("Error opening %s\r\n", str);
 				exit(1);
diff --git a/src/sbbs3/fido.cpp b/src/sbbs3/fido.cpp
index 3855f0531817802346e2195e978b194ef8e2b6c1..f2378f3c1f056719987013850730da848976b592 100644
--- a/src/sbbs3/fido.cpp
+++ b/src/sbbs3/fido.cpp
@@ -82,7 +82,7 @@ bool sbbs_t::lookup_netuser(char *into)
 		strupr(name);
 		str[35]=0;
 		truncsp(str+27);
-		sprintf(q,"Do you mean %s @%s",str,str+27);
+		SAFEPRINTF2(q,"Do you mean %s @%s",str,str+27);
 		if(strstr(name,to) && yesno(q)) {
 			fclose(stream);
 			sprintf(into,"%s@%s",str,str+27);
diff --git a/src/sbbs3/filelist.c b/src/sbbs3/filelist.c
index 9d963188a8930df2e5e41921716d0ecba9f9dbeb..dfed141029ccabcf8339bb54faf0c8069ca7bd79 100644
--- a/src/sbbs3/filelist.c
+++ b/src/sbbs3/filelist.c
@@ -414,7 +414,7 @@ int main(int argc, char **argv)
 			}
 
 			if(misc&MINUS) {
-				sprintf(str,"%s%s",scfg.dir[i]->path,fname);
+				SAFEPRINTF2(str,"%s%s",scfg.dir[i]->path,fname);
 				if(!fexistcase(str))
 					fputc('-',out);
 				else
@@ -425,7 +425,7 @@ int main(int argc, char **argv)
 			desc_off++;
 
 			if(misc&DFD) {
-				sprintf(str,"%s%s",scfg.dir[i]->path,fname);
+				SAFEPRINTF2(str,"%s%s",scfg.dir[i]->path,fname);
 				fprintf(out,"%s ",unixtodstr(&scfg,(time32_t)fdate(str),str));
 				desc_off+=9; 
 			}
diff --git a/src/sbbs3/fmsgdump.c b/src/sbbs3/fmsgdump.c
index 09b7b7170fe80da0b764361faa052e9d7dceb6cd..b1d2a935659c8af35ffc2f9bcc8b427bd4f47a89 100644
--- a/src/sbbs3/fmsgdump.c
+++ b/src/sbbs3/fmsgdump.c
@@ -51,7 +51,7 @@ const char* fmsgattr_str(uint16_t attr)
 	if(str[0] == 0)
 		return "";
 
-	static char buf[64];
+	static char buf[128];
 	sprintf(buf, "(%s)", str);
 	return buf;
 }
diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp
index b6786fc82f72c8fff6809606fdbb000bbddd97a6..0e1121e74bd12c466f4ce5a0e2f5088953c1d762 100644
--- a/src/sbbs3/js_bbs.cpp
+++ b/src/sbbs3/js_bbs.cpp
@@ -3339,7 +3339,7 @@ js_put_telegram(JSContext *cx, uintN argc, jsval *arglist)
 			sbbs->bputs("\1n: \1h");
 			if(!sbbs->getstr(line, 70, i < 4 ? (K_WRAP|K_MSG) : (K_MSG)))
 				break;
-			sprintf(str,"%4s%s\r\n",nulstr,line);
+			SAFEPRINTF2(str,"%4s%s\r\n",nulstr,line);
 			SAFECAT(buf, str);
 			if(i && line[0])
 				SAFECAT(logbuf, " ");
diff --git a/src/sbbs3/listfile.cpp b/src/sbbs3/listfile.cpp
index 241a8d046107454b1d0476117241c0c7b97c97e2..58923be8ead16e05a645677070fad2576f4babd8 100644
--- a/src/sbbs3/listfile.cpp
+++ b/src/sbbs3/listfile.cpp
@@ -1164,8 +1164,8 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode)
 								&& findfile(&cfg,f.dir,path))
 								bprintf(text[FileAlreadyThere],path);
 							else {
-								sprintf(path,"%s%s",dirpath,fname);
-								sprintf(tmp,"%s%s",dirpath,str);
+								SAFEPRINTF2(path,"%s%s",dirpath,fname);
+								SAFEPRINTF2(tmp,"%s%s",dirpath,str);
 								if(fexistcase(path) && rename(path,tmp))
 									bprintf(text[CouldntRenameFile],path,tmp);
 								else {
@@ -1226,7 +1226,7 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode)
 					update_uldate(&cfg, &f);
 					break;
 				case 'F':   /* delete file only */
-					sprintf(str,"%s%s",dirpath,fname);
+					SAFEPRINTF2(str,"%s%s",dirpath,fname);
 					if(!fexistcase(str))
 						bprintf(text[FileDoesNotExist],str);
 					else {
@@ -1245,7 +1245,7 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode)
 					if(noyes(text[RemoveFileQ]))
 						break;
 					removefile(&f);
-					sprintf(str,"%s%s",dirpath,fname);
+					SAFEPRINTF2(str,"%s%s",dirpath,fname);
 					if(fexistcase(str)) {
 						if(dir_op(dirnum)) {
 							if(!noyes(text[DeleteFileQ])) {
@@ -1340,7 +1340,7 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode)
 					break; } 
 		}
 		else if(mode==FI_DOWNLOAD || mode==FI_USERXFER) {
-			sprintf(path,"%s%s",dirpath,fname);
+			SAFEPRINTF2(path,"%s%s",dirpath,fname);
 			if(f.size<1L) { /* getfiledat will set this to -1 if non-existant */
 				SYNC;       /* and 0 byte files shouldn't be d/led */
 				mnemonics(text[QuitOrNext]);
@@ -1417,8 +1417,8 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode)
 							lncntr=0;
 							seqwait(cfg.dir[f.dir]->seqdev);
 							bprintf(text[RetrievingFile],fname);
-							sprintf(str,"%s%s",dirpath,fname);
-							sprintf(path,"%s%s",cfg.temp_dir,fname);
+							SAFEPRINTF2(str,"%s%s",dirpath,fname);
+							SAFEPRINTF2(path,"%s%s",cfg.temp_dir,fname);
 							mv(str,path,1); /* copy the file to temp dir */
 							if(getnodedat(cfg.node_num,&thisnode,true)==0) {
 								thisnode.aux=0xf0;
diff --git a/src/sbbs3/netmail.cpp b/src/sbbs3/netmail.cpp
index 65dae51a6bdf5700362833cae21ec1fbf30d12e1..5e6f206c2c18d3f81bd46fb9d68bed507d565a52 100644
--- a/src/sbbs3/netmail.cpp
+++ b/src/sbbs3/netmail.cpp
@@ -204,7 +204,7 @@ bool sbbs_t::netmail(const char *into, const char *title, long mode, smb_t* resm
 		SAFECOPY(tmp, cfg.data_dir);
 		if(tmp[0]=='.')    /* Relative path */
 			sprintf(tmp,"%s%s", cfg.node_dir, cfg.data_dir);
-		sprintf(str,"%sfile/%04u.out/%s",tmp,useron.number,fname);
+		SAFEPRINTF3(str,"%sfile/%04u.out/%s",tmp,useron.number,fname);
 		SAFECOPY(subj, str);
 		if(fexistcase(str)) {
 			bputs(text[FileAlreadyThere]);
@@ -1423,7 +1423,7 @@ bool sbbs_t::qnetmail(const char *into, const char *subj, long mode, smb_t* resm
 	useron.etoday++;
 	putuserrec(&cfg,useron.number,U_ETODAY,5,ultoa(useron.etoday,tmp,10));
 
-	sprintf(str,"sent QWK NetMail to %s (%s)"
+	SAFEPRINTF2(str,"sent QWK NetMail to %s (%s)"
 		,to,fulladdr);
 	logline("EN",str);
 	return(true);
diff --git a/src/sbbs3/qwknodes.c b/src/sbbs3/qwknodes.c
index 46c1e976b82cf4987091942b4fd1802d8d6eee75..de128146e4a94ded3aa192c0b01d6f21c80be4d2 100644
--- a/src/sbbs3/qwknodes.c
+++ b/src/sbbs3/qwknodes.c
@@ -340,7 +340,7 @@ int main(int argc, char **argv)
 								p=addr;
 							else
 								*(p++)=0;
-							sprintf(str,"%s %s:%s%c%s"
+							safe_snprintf(str, sizeof(str), "%s %s:%s%c%s"
 								,unixtodstr(&cfg,msg.hdr.when_written.time,tmp)
 								,p,cfg.sys_id,p==addr ? 0 : '/'
 								,addr);
diff --git a/src/sbbs3/sbbscon.c b/src/sbbs3/sbbscon.c
index 8dba45eaabbb3b49a8f1014e7ba59aa68d274663..c603e9f9331dbaad4c37f82342695a75ad972700 100644
--- a/src/sbbs3/sbbscon.c
+++ b/src/sbbs3/sbbscon.c
@@ -713,7 +713,7 @@ static int bbs_lputs(void* p, int level, const char *str)
 			,tm.tm_mon+1,tm.tm_mday
 			,tm.tm_hour,tm.tm_min,tm.tm_sec);
 
-	sprintf(logline,"%sterm %.*s",tstr,(int)sizeof(logline)-32,str);
+	sprintf(logline,"%sterm %.*s",tstr,(int)sizeof(logline)-70,str);
 	truncsp(logline);
 	lputs(level,logline);
 
@@ -778,7 +778,7 @@ static int stat_lputs(void* p, int level, const char *str)
 			,tm.tm_mon+1,tm.tm_mday
 			,tm.tm_hour,tm.tm_min,tm.tm_sec);
 
-	sprintf(logline,"%sstat %.*s",tstr,(int)sizeof(logline)-32,str);
+	sprintf(logline,"%sstat %.*s",tstr,(int)sizeof(logline)-70,str);
 	truncsp(logline);
 	lputs(level,logline);
 
@@ -845,7 +845,7 @@ static int ftp_lputs(void* p, int level, const char *str)
 			,tm.tm_mon+1,tm.tm_mday
 			,tm.tm_hour,tm.tm_min,tm.tm_sec);
 
-	sprintf(logline,"%sftp  %.*s",tstr,(int)sizeof(logline)-32,str);
+	sprintf(logline,"%sftp  %.*s",tstr,(int)sizeof(logline)-70,str);
 	truncsp(logline);
 	lputs(level,logline);
 
@@ -911,7 +911,7 @@ static int mail_lputs(void* p, int level, const char *str)
 			,tm.tm_mon+1,tm.tm_mday
 			,tm.tm_hour,tm.tm_min,tm.tm_sec);
 
-	sprintf(logline,"%smail %.*s",tstr,(int)sizeof(logline)-32,str);
+	sprintf(logline,"%smail %.*s",tstr,(int)sizeof(logline)-70,str);
 	truncsp(logline);
 	lputs(level,logline);
 
@@ -977,7 +977,7 @@ static int services_lputs(void* p, int level, const char *str)
 			,tm.tm_mon+1,tm.tm_mday
 			,tm.tm_hour,tm.tm_min,tm.tm_sec);
 
-	sprintf(logline,"%ssrvc %.*s",tstr,(int)sizeof(logline)-32,str);
+	sprintf(logline,"%ssrvc %.*s",tstr,(int)sizeof(logline)-70,str);
 	truncsp(logline);
 	lputs(level,logline);
 
@@ -1043,7 +1043,7 @@ static int event_lputs(void* p, int level, const char *str)
 			,tm.tm_mon+1,tm.tm_mday
 			,tm.tm_hour,tm.tm_min,tm.tm_sec);
 
-	sprintf(logline,"%sevnt %.*s",tstr,(int)sizeof(logline)-32,str);
+	sprintf(logline,"%sevnt %.*s",tstr,(int)sizeof(logline)-70,str);
 	truncsp(logline);
 	lputs(level,logline);
 
@@ -1085,7 +1085,7 @@ static int web_lputs(void* p, int level, const char *str)
 			,tm.tm_mon+1,tm.tm_mday
 			,tm.tm_hour,tm.tm_min,tm.tm_sec);
 
-	sprintf(logline,"%sweb  %.*s",tstr,(int)sizeof(logline)-32,str);
+	sprintf(logline,"%sweb  %.*s",tstr,(int)sizeof(logline)-70,str);
 	truncsp(logline);
 	lputs(level,logline);
 
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index f09ba8ee17dde8a0a4ce8007e55c88dbf4b3f58b..08f672e0e47cdec6fcb61ab7c534527105115f49 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -1128,9 +1128,9 @@ static void js_service_thread(void* arg)
 	/* RUN SCRIPT */
 	SAFECOPY(fname,service->cmd);
 	truncstr(fname," ");
-	sprintf(spath,"%s%s",scfg.mods_dir,fname);
+	SAFEPRINTF2(spath,"%s%s",scfg.mods_dir,fname);
 	if(scfg.mods_dir[0]==0 || !fexist(spath))
-		sprintf(spath,"%s%s",scfg.exec_dir,fname);
+		SAFEPRINTF2(spath,"%s%s",scfg.exec_dir,fname);
 
 	js_init_args(js_cx, js_glob, service->cmd);
 
@@ -1246,9 +1246,9 @@ static void js_static_service_thread(void* arg)
 
 	SAFECOPY(fname,service->cmd);
 	truncstr(fname," ");
-	sprintf(spath,"%s%s",scfg.mods_dir,fname);
+	SAFEPRINTF2(spath,"%s%s",scfg.mods_dir,fname);
 	if(scfg.mods_dir[0]==0 || !fexist(spath))
-		sprintf(spath,"%s%s",scfg.exec_dir,fname);
+		SAFEPRINTF2(spath,"%s%s",scfg.exec_dir,fname);
 
 	do {
 		if((js_cx=js_initcx(js_runtime,INVALID_SOCKET,&service_client,&js_glob))==NULL) {
diff --git a/src/sbbs3/slog.c b/src/sbbs3/slog.c
index 2e2ce40df396c6b06b98e8c23564caf7627b87fd..065bee676f94fe156a5803ffbe05a5e64bfa462a 100644
--- a/src/sbbs3/slog.c
+++ b/src/sbbs3/slog.c
@@ -54,7 +54,7 @@ if(!dir[0]) {
 
 backslash(dir);
 
-sprintf(str,"%scsts.dab",dir);
+SAFEPRINTF(str,"%scsts.dab",dir);
 if(!fexistcase(str)) {
 	printf("%s does not exist\r\n",str);
 	return(1); }
diff --git a/src/sbbs3/un_qwk.cpp b/src/sbbs3/un_qwk.cpp
index ac856bdbdad54f8d9082aa5d4c887b27d7ee5fe5..9b0472baf389f9cdd6893715b856febbc2a62335 100644
--- a/src/sbbs3/un_qwk.cpp
+++ b/src/sbbs3/un_qwk.cpp
@@ -396,7 +396,7 @@ bool sbbs_t::unpack_qwk(char *packet,uint hubnum)
 		MKDIR(inbox);
 
 		// Copy files
-		sprintf(fname,"%s/%s",inbox,dirent->d_name);
+		SAFEPRINTF2(fname,"%s/%s",inbox,dirent->d_name);
 		mv(str,fname,1 /* overwrite */);
 		sprintf(str,text[ReceivedFileViaQWK],dirent->d_name,cfg.qhub[hubnum]->id);
 		putsmsg(&cfg,1,str);
diff --git a/src/sbbs3/upload.cpp b/src/sbbs3/upload.cpp
index 05476e6db14d78a30d1e62b55adfb351335b85e7..4733ad1cabb11c9298b033bb6089e9c731805568 100644
--- a/src/sbbs3/upload.cpp
+++ b/src/sbbs3/upload.cpp
@@ -316,7 +316,7 @@ bool sbbs_t::upload(uint dirnum)
 			,cfg.dir[dirnum]->sname);
 	if(!yesno(str)) return(false);
 	action=NODE_ULNG;
-	sprintf(str,"%s%s",path,fname);
+	SAFEPRINTF2(str,"%s%s",path,fname);
 	if(fexistcase(str)) {   /* File is on disk */
 #ifdef _WIN32
 		GetShortPathName(str, spath, sizeof(spath));
@@ -459,7 +459,7 @@ bool sbbs_t::upload(uint dirnum)
 		if(!noyes(text[AnonymousQ]))
 			f.misc|=FM_ANON; 
 	}
-	sprintf(str,"%s%s",path,fname);
+	SAFEPRINTF2(str,"%s%s",path,fname);
 	if(fexistcase(str)) {   /* File is on disk */
 		if(!uploadfile(&f))
 			return(false); 
@@ -570,7 +570,7 @@ bool sbbs_t::bulkupload(uint dirnum)
 	SYNC;
 	dir=opendir(path);
 	while(dir!=NULL && (dirent=readdir(dir))!=NULL && !msgabort()) {
-		sprintf(str,"%s%s",path,dirent->d_name);
+		SAFEPRINTF2(str,"%s%s",path,dirent->d_name);
 		if(isdir(str))
 			continue;
 #ifdef _WIN32
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index 0a7223450dae553eefc8777b5ba8b415e420870e..e88d3741aaa61474eeea333a5ff02a62f54d91cc 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -1518,18 +1518,19 @@ static void send_error(http_session_t * session, unsigned line, const char* mess
 
 		if(session->req.error_dir) {
 			/* We have a custom error directory from webctrl.ini look there first */
-			sprintf(sbuf,"%s%s%s",session->req.error_dir,error_code,startup->ssjs_ext);
+			SAFEPRINTF3(sbuf,"%s%s%s",session->req.error_dir,error_code,startup->ssjs_ext);
 			if(stat(sbuf,&sb)) {
 				/* No custom .ssjs error message... check for custom .html */
-				sprintf(sbuf2,"%s%s.html",session->req.error_dir,error_code);
+				SAFEPRINTF2(sbuf2,"%s%s.html",session->req.error_dir,error_code);
 				if(stat(sbuf2,&sb)) {
 					/* Nope, no custom .html error either, check for global ssjs one */
-					sprintf(sbuf,"%s%s%s",error_dir,error_code,startup->ssjs_ext);
+					SAFEPRINTF3(sbuf,"%s%s%s",error_dir,error_code,startup->ssjs_ext);
 				}
 			}
 		}
-		else
-			sprintf(sbuf,"%s%s%s",error_dir,error_code,startup->ssjs_ext);
+		else {
+			SAFEPRINTF3(sbuf,"%s%s%s",error_dir,error_code,startup->ssjs_ext);
+		}
 		if(!stat(sbuf,&sb)) {
 			lprintf(LOG_INFO,"%04d Using SSJS error page",session->socket);
 			session->req.dynamic=IS_SSJS;
@@ -3611,7 +3612,7 @@ static BOOL check_request(http_session_t * session)
 		p=last_slash;
 		/* Terminate the path after the slash */
 		*(last_slash+1)=0;
-		sprintf(str,"%saccess.ars",curdir);
+		SAFEPRINTF(str,"%saccess.ars",curdir);
 		if(!stat(str,&sb)) {
 			/* NEVER serve up an access.ars file */
 			lprintf(LOG_WARNING,"%04d !WARNING! access.ars support is deprecated and will be REMOVED very soon.",session->socket);
@@ -3633,7 +3634,7 @@ static BOOL check_request(http_session_t * session)
 			/* Truncate at \r or \n - can use last_slash since I'm done with it.*/
 			truncsp(session->req.ars);
 		}
-		sprintf(str,"%swebctrl.ini",curdir);
+		SAFEPRINTF(str,"%swebctrl.ini",curdir);
 		if(!stat(str,&sb)) {
 			/* NEVER serve up a webctrl.ini file */
 			if(!strcmp(path,str)) {
diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp
index 473f80119075096e765a6d0aea292ea9c4047313..0297e571abedeb494ce0e435d355def1f81c106e 100644
--- a/src/sbbs3/xtrn_sec.cpp
+++ b/src/sbbs3/xtrn_sec.cpp
@@ -212,7 +212,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 			return; 
 		}
 
-		sprintf(str,"%s\n%s\n%s\n%s\n"
+		safe_snprintf(str, sizeof(str), "%s\n%s\n%s\n%s\n"
 			,name								/* User name */
 			,cfg.sys_name						/* System name */
 			,cfg.sys_op 						/* Sysop name */
@@ -220,7 +220,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 		lfexpand(str,misc);
 		write(file,str,strlen(str));
 
-		sprintf(str,"%s\n%s\n%u\n%u\n%lu\n%s\n%lu\n%lu\n"
+		safe_snprintf(str, sizeof(str), "%s\n%s\n%u\n%u\n%lu\n%s\n%lu\n%lu\n"
 			,ctrl_dir							/* Ctrl dir */
 			,data_dir							/* Data dir */
 			,cfg.sys_nodes						/* Total system nodes */
@@ -234,7 +234,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 		lfexpand(str,misc);
 		write(file,str,strlen(str));
 
-		sprintf(str,"%u\n%u\n%s\n%c\n%u\n%s\n"
+		safe_snprintf(str, sizeof(str), "%u\n%u\n%s\n%c\n%u\n%s\n"
 			,useron.level						/* User main level */
 			,useron.level						/* User transfer level */
 			,useron.birth						/* User birthday */
@@ -244,7 +244,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 		lfexpand(str,misc);
 		write(file,str,strlen(str));
 
-		sprintf(str,"%u\n%u\n%x\n%lu\n%s\n%s\n"
+		safe_snprintf(str, sizeof(str), "%u\n%u\n%x\n%lu\n%s\n%s\n"
 			"%s\n%s\n%s\n%s\n%s\n%s\n%lu\n"
 			,misc&(XTRN_STDIO|XTRN_CONIO) ? 0:cfg.com_port		/* Com port or 0 if !FOSSIL */
 			,cfg.com_irq						/* Com IRQ */
@@ -295,7 +295,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 		lfexpand(str,misc);
 		write(file,str,strlen(str));
 
-		sprintf(str,"%s\n%s\n%d\n%s\n%lu\n%s\n%s\n%s\n%s\n"
+		safe_snprintf(str, sizeof(str), "%s\n%s\n%d\n%s\n%lu\n%s\n%s\n%s\n%s\n"
 			"%" PRIx32 "\n%d\n"
 			,ltoaf(useron.flags3,tmp)			/* Flag set #3 */
 			,ltoaf(useron.flags4,tmp2)			/* Flag set #4 */
@@ -329,7 +329,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 		if(tleft>0x7fff)	/* Reduce time-left for broken 16-bit doors		*/
 			tleft=0x7fff;	/* That interpret this value as a signed short	*/
 
-		sprintf(str,"%u\n%s\n%s\n%s\n%u\n%c\n"
+		safe_snprintf(str, sizeof(str), "%u\n%s\n%s\n%s\n%u\n%c\n"
 			,useron.number						/* User number */
 			,name								/* User name */
 			,useron.name						/* User real name */
@@ -340,7 +340,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 		lfexpand(str,misc);
 		write(file,str,strlen(str));
 
-		sprintf(str,"%lu\n%s\n%lu\n%ld\n%u\n%u\n%u\n%ld\n%u\n"
+		safe_snprintf(str, sizeof(str), "%lu\n%s\n%lu\n%ld\n%u\n%u\n%u\n%ld\n%u\n"
 			,useron.cdt+useron.freecdt			/* Gold */
 			,unixtodstr(&cfg,useron.laston,tmp)	/* User last on date */
 			,cols 								/* User screen width */
@@ -353,7 +353,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 		lfexpand(str,misc);
 		write(file,str,strlen(str));
 
-		sprintf(str,"%lu\n%s\n%s\n%s\n%lu\n%d\n%s\n%s\n"
+		safe_snprintf(str, sizeof(str), "%lu\n%s\n%s\n%s\n%lu\n%d\n%s\n%s\n"
 			"%u\n%u\n%lu\n%u\n%lu\n%u\n%s\n"
 			,tleft								/* Time left in seconds */
 			,node_dir							/* Gfiles dir (log dir) */
@@ -464,7 +464,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 		lfexpand(str,misc);
 		write(file,str,strlen(str));
 
-		sprintf(str,"%u\n%lu\n%s\n%s\n%s\n%s"
+		safe_snprintf(str, sizeof(str), "%u\n%lu\n%s\n%s\n%s\n%s"
 			"\n%s\n%02d:%02d\n%c\n"
 			,0									/* 30: Kbytes downloaded today */
 			,(useron.cdt+useron.freecdt)/1024UL /* 31: Max Kbytes to download today */