From 15b64e08498a2a882c1f7e7a29b4ca516c31dcc3 Mon Sep 17 00:00:00 2001 From: Robert MacGregor Date: Sun, 1 May 2016 02:57:45 -0400 Subject: [PATCH] Fix more compiler warnings regarding returning stack-based variables; Fixed more compiler warnings about the safety of methods such as sprintf --- .../TSExtension/source/DXConCmds.cpp | 104 ++++++++++-------- 1 file changed, 61 insertions(+), 43 deletions(-) diff --git a/Mod Sources/TSExtension/TSExtension/source/DXConCmds.cpp b/Mod Sources/TSExtension/TSExtension/source/DXConCmds.cpp index b7a5b39..dafd43a 100644 --- a/Mod Sources/TSExtension/TSExtension/source/DXConCmds.cpp +++ b/Mod Sources/TSExtension/TSExtension/source/DXConCmds.cpp @@ -8,63 +8,77 @@ const char *conDumpHex(Linker::SimObject *obj, S32 argc, const char *argv[]) { // Hmm... - char result[256]; - - unsigned int addr=atoi(argv[1]); - DX::memToHex(addr,result,atoi(argv[2]),dAtob(argv[3])); - return result; - -} -const char *conDumpUInt(Linker::SimObject *obj, S32 argc, const char *argv[]) -{ - // Hmm... - char result[256]; - - unsigned int addr=atoi(argv[1]); - sprintf(result,"%d",DX::memToUInt(addr)); - return result; - -} -const char *conDumpFloat(Linker::SimObject *obj, S32 argc, const char *argv[]) -{ - // Hmm... - char result[256]; - - unsigned int addr=atoi(argv[1]); - sprintf(result,"%f",DX::memToFloat(addr)); - return result; - -} -const char *conFloatToHex(Linker::SimObject *obj, S32 argc, const char *argv[]) -{ char formatResult[256]; - float input=atof(argv[1]); - float * inputptr=&input; - void * inputptr2 = (void *)inputptr; - unsigned int * inputptr3=(unsigned int*)inputptr2; - sprintf (formatResult,"%08X",*inputptr3); + + unsigned int addr=atoi(argv[1]); + DX::memToHex(addr,formatResult,atoi(argv[2]),dAtob(argv[3])); char* result = new char[256]; memcpy(result, formatResult, 256); return result; } + +const char *conDumpUInt(Linker::SimObject *obj, S32 argc, const char *argv[]) +{ + // Hmm... + char formatResult[256]; + + unsigned int addr=atoi(argv[1]); + sprintf_s<256>(formatResult,"%d",DX::memToUInt(addr)); + + char* result = new char[256]; + memcpy(result, formatResult, 256); + + return result; +} + +const char *conDumpFloat(Linker::SimObject *obj, S32 argc, const char *argv[]) +{ + // Hmm... + char formatResult[256]; + + unsigned int addr = atoi(argv[1]); + sprintf_s<256>(formatResult,"%f",DX::memToFloat(addr)); + + char* result = new char[256]; + memcpy(result, formatResult, 256); + + return result; +} + +const char *conFloatToHex(Linker::SimObject *obj, S32 argc, const char *argv[]) +{ + char formatResult[256]; + float input=std::stof(argv[1]); + float * inputptr=&input; + void * inputptr2 = (void *)inputptr; + unsigned int * inputptr3=(unsigned int*)inputptr2; + sprintf_s<256>(formatResult,"%08X",*inputptr3); + + char* result = new char[256]; + memcpy(result, formatResult, 256); + + return result; +} + const char *conGetAddress(Linker::SimObject *obj, S32 argc, const char *argv[]) { // Hmm... char formatResult[256]; - sprintf(formatResult, "%x", obj); + sprintf_s<256>(formatResult, "%x", obj); char* result = new char[256]; memcpy(result, formatResult, 256); return result; } + const char *conGetAddressDec(Linker::SimObject *obj, S32 argc, const char *argv[]) { // Hmm... char formatResult[256]; - sprintf(formatResult, "%d", obj); + sprintf_s<256>(formatResult, "%d", obj); char* result = new char[256]; memcpy(result, formatResult, 256); @@ -156,13 +170,13 @@ S32 conGetGhostIndex(Linker::SimObject *obj, S32 argc, const char* argv[]) DX::NetConnection conn = DX::NetConnection((unsigned int)obj); - char aicommand[255]=""; - sprintf (aicommand,"return (%d.isAIControlled());", conn.identifier); + char aicommand[256]=""; + sprintf_s<256>(aicommand,"return (%d.isAIControlled());", conn.identifier); if (dAtob(Con::evaluate(aicommand, false, NULL, false)) == true) return -1; - char command[255]=""; - sprintf (command,"return (%d.getAddress());",conn.identifier); + char command[256]=""; + sprintf_s<256>(command,"return (%d.getAddress());",conn.identifier); if (strcmp(Con::evaluate(command, false, NULL, false), "local") == 0) return atoi(argv[2]); @@ -354,7 +368,7 @@ const char* conSprintf(Linker::SimObject *obj, S32 argc, const char* argv[]) char formatResult[256]; va_list variable_args = reinterpret_cast(input.data()); - vsprintf(formatResult, argv[1], variable_args); + vsprintf_s<256>(formatResult, argv[1], variable_args); char* result = new char[256]; memcpy(result, formatResult, 256); @@ -410,10 +424,14 @@ const char* reReplace(Linker::SimObject* obj, S32 argc, const char* argv[]) { try { - std::string result = std::regex_replace(std::string(argv[2]), + std::string replaceResult = std::regex_replace(std::string(argv[2]), std::regex(argv[1], std::regex::extended), std::string(argv[3])); - return result.c_str(); + + char* result = new char[256]; + memcpy(result, replaceResult.c_str(), replaceResult.size()); + + return result; } catch (std::regex_error) {