diff --git a/src/debug/debug.cpp b/src/debug/debug.cpp index dcf0b800..217710dc 100644 --- a/src/debug/debug.cpp +++ b/src/debug/debug.cpp @@ -2288,8 +2288,10 @@ bool CDebugVar::LoadVars(char* name) // read number of vars Bit16u num; - if (fread(&num,sizeof(num),1,f) != 1) return false; - + if (fread(&num,sizeof(num),1,f) != 1) { + fclose(f); + return false; + } for (Bit16u i=0; i #include +#include "cross.h" #include "support.h" #include "regs.h" #include "debug.h" @@ -56,16 +57,18 @@ void DEBUG_ShowMsg(char const* format,...) { char buf[512]; va_list msg; va_start(msg,format); - vsprintf(buf,format,msg); + vsnprintf(buf,sizeof(buf),format,msg); va_end(msg); + buf[sizeof(buf) - 1] = '\0'; + /* Add newline if not present */ - Bitu len=strlen(buf); - if(buf[len-1]!='\n') strcat(buf,"\n"); + size_t len = strlen(buf); + if(buf[len - 1] != '\n' && len + 1 < sizeof(buf) ) strcat(buf,"\n"); if(debuglog) fprintf(debuglog,"%s",buf); - if (logBuffPos!=logBuff.end()) { + if (logBuffPos != logBuff.end()) { logBuffPos=logBuff.end(); DEBUG_RefreshPage(0); // mvwprintw(dbg.win_out,dbg.win_out->_maxy-1, 0, ""); diff --git a/src/gui/sdlmain.cpp b/src/gui/sdlmain.cpp index 87a45ebf..34ca3f57 100644 --- a/src/gui/sdlmain.cpp +++ b/src/gui/sdlmain.cpp @@ -1716,12 +1716,14 @@ static BOOL WINAPI ConsoleEventHandler(DWORD event) { static bool no_stdout = false; void GFX_ShowMsg(char const* format,...) { char buf[512]; + va_list msg; va_start(msg,format); - vsprintf(buf,format,msg); - strcat(buf,"\n"); + vsnprintf(buf,sizeof(buf),format,msg); va_end(msg); - if(!no_stdout) printf("%s",buf); //Else buf is parsed again. + + buf[sizeof(buf) - 1] = '\0'; + if (!no_stdout) puts(buf); //Else buf is parsed again. (puts adds end of line) } diff --git a/src/misc/support.cpp b/src/misc/support.cpp index e90b07ef..0a01c6b9 100644 --- a/src/misc/support.cpp +++ b/src/misc/support.cpp @@ -28,6 +28,7 @@ #include #include "dosbox.h" +#include "cross.h" #include "debug.h" #include "support.h" #include "video.h" @@ -181,9 +182,11 @@ void E_Exit(const char * format,...) { #endif va_list msg; va_start(msg,format); - vsprintf(buf,format,msg); + vsnprintf(buf,sizeof(buf),format,msg); va_end(msg); - strcat(buf,"\n"); + + buf[sizeof(buf) - 1] = '\0'; + //strcat(buf,"\n"); catcher should handle the end of line.. throw(buf); }