From 858b6788d3939bc183a88132864fb08db56c4b06 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Tue, 19 May 2020 01:02:12 +0000
Subject: [PATCH] Move term_env from static (BSS) variable to sbbs_t member.
 Static member function variables are shared among threads, so this was just a
 race-condition waiting to happen. <grimmace>

---
 src/sbbs3/sbbs.h   | 1 +
 src/sbbs3/xtrn.cpp | 5 ++---
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index a47b51aee7..4af980cb59 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -1010,6 +1010,7 @@ public:
 	/* xtrn.cpp */
 	int		external(const char* cmdline, long mode, const char* startup_dir=NULL);
 	long	xtrn_mode;
+	char	term_env[256];
 
 	/* xtrn_sec.cpp */
 	int		xtrn_sec(const char* section = "");	/* The external program section  */
diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp
index 6af8443cd8..2ae7300a38 100644
--- a/src/sbbs3/xtrn.cpp
+++ b/src/sbbs3/xtrn.cpp
@@ -1529,11 +1529,10 @@ int sbbs_t::external(const char* cmdline, long mode, const char* startup_dir)
 		sigfillset(&sigs);
 		sigprocmask(SIG_UNBLOCK,&sigs,NULL);
 		if(!(mode&EX_BIN))  {
-			static char	term_env[256];
 			if(term_supports(ANSI))
-				sprintf(term_env,"TERM=%s",startup->xtrn_term_ansi);
+				SAFEPRINTF(term_env,"TERM=%s",startup->xtrn_term_ansi);
 			else
-				sprintf(term_env,"TERM=%s",startup->xtrn_term_dumb);
+				SAFEPRINTF(term_env,"TERM=%s",startup->xtrn_term_dumb);
 			putenv(term_env);
 		}
 #ifdef __FreeBSD__
-- 
GitLab