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