diff --git a/Engine/source/console/compiledEval.cpp b/Engine/source/console/compiledEval.cpp index 236feea49..00afc4a00 100644 --- a/Engine/source/console/compiledEval.cpp +++ b/Engine/source/console/compiledEval.cpp @@ -723,7 +723,7 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa struct { SimObject* newObject; U32 failJump; - } objectCreationStack[objectCreationStackSize]; + } objectCreationStack[objectCreationStackSize] = {}; SimObject* currentNewObject = 0; StringTableEntry prevField = NULL; @@ -2346,7 +2346,7 @@ execFinished: AssertFatal(!(_STK < stackStart), "String stack popped too much in script exec"); #endif - return std::move(returnValue); + return returnValue; } //------------------------------------------------------------ diff --git a/Engine/source/console/console.cpp b/Engine/source/console/console.cpp index 5872d7061..0f761301a 100644 --- a/Engine/source/console/console.cpp +++ b/Engine/source/console/console.cpp @@ -91,7 +91,7 @@ static const char * prependDollar ( const char * name ) { if(name[0] != '$') { - S32 len = dStrlen(name); + U64 len = dStrlen(name); AssertFatal(len < sizeof(scratchBuffer)-2, "CONSOLE: name too long"); scratchBuffer[0] = '$'; dMemcpy(scratchBuffer + 1, name, len + 1); @@ -104,7 +104,7 @@ static const char * prependPercent ( const char * name ) { if(name[0] != '%') { - S32 len = dStrlen(name); + U64 len = dStrlen(name); AssertFatal(len < sizeof(scratchBuffer)-2, "CONSOLE: name too long"); scratchBuffer[0] = '%'; dMemcpy(scratchBuffer + 1, name, len + 1); @@ -504,7 +504,7 @@ U32 tabComplete(char* inputBuffer, U32 cursorPos, U32 maxResultLength, bool forw } // Find the object identifier. - S32 objLast = --p; + U64 objLast = --p; while ((p > 0) && (inputBuffer[p - 1] != ' ') && (inputBuffer[p - 1] != '(')) { p--; @@ -646,7 +646,7 @@ static void _printf(ConsoleLogEntry::Level level, ConsoleLogEntry::Type type, co return; Con::active = false; - char buffer[8192]; + char buffer[8192] = {}; U32 offset = 0; if( gEvalState.traceOn && gEvalState.getStackDepth() > 0 ) { @@ -703,7 +703,7 @@ static void _printf(ConsoleLogEntry::Level level, ConsoleLogEntry::Type type, co entry.mLevel = level; entry.mType = type; #ifndef TORQUE_SHIPPING // this is equivalent to a memory leak, turn it off in ship build - dsize_t logStringLen = dStrlen(pos) + 1; + U64 logStringLen = dStrlen(pos) + 1; entry.mString = (const char *)consoleLogChunker.alloc(logStringLen); dStrcpy(const_cast(entry.mString), pos, logStringLen); @@ -776,7 +776,7 @@ bool getVariableObjectField(const char *name, SimObject **object, const char **f const char *dot = dStrchr(name, '.'); if(name[0] != '$' && dot) { - S32 len = dStrlen(name); + U64 len = dStrlen(name); AssertFatal(len < sizeof(scratchBuffer)-1, "Sim::getVariable - name too long"); dMemcpy(scratchBuffer, name, len+1); @@ -978,7 +978,7 @@ const char *getObjectTokenField(const char *name) const char *dot = dStrchr(name, '.'); if(name[0] != '$' && dot) { - S32 len = dStrlen(name); + U64 len = dStrlen(name); AssertFatal(len < sizeof(scratchBuffer)-1, "Sim::getVariable - object name too long"); dMemcpy(scratchBuffer, name, len+1); @@ -1551,19 +1551,23 @@ ConsoleValue _internalExecute(S32 argc, ConsoleValue argv[]) StringTableEntry funcName = StringTable->insert(argv[0].getString()); if (argc > 1) { - const char** argv_str = static_cast(malloc((argc - 1) * sizeof(char*))); - for (int i = 0; i < argc - 1; i++) + const char** argv_str = static_cast(malloc(size_t(argc) * sizeof(char*))); + if (argv_str) { - argv_str[i] = argv[i + 1].getString(); + for (int i = 0; i < argc - 1; i++) + { + argv_str[i] = argv[i + 1].getString(); + } } bool result; const char* methodRes = CInterface::CallFunction(NULL, funcName, argv_str, argc - 1, &result); + free(argv_str); if (result) { ConsoleValue ret; ret.setString(methodRes); - return std::move(ret); + return ret; } } Namespace::Entry *ent; @@ -1616,6 +1620,9 @@ ConsoleValue execute(S32 argc, const char *argv[]) // Internal execute for object method which does not save the stack static ConsoleValue _internalExecute(SimObject *object, S32 argc, ConsoleValue argv[], bool thisCallOnly) { + if (object == NULL) + return std::move(ConsoleValue()); + if(argc < 2) { STR.clearFunctionOffset(); @@ -1639,10 +1646,13 @@ static ConsoleValue _internalExecute(SimObject *object, S32 argc, ConsoleValue a StringTableEntry funcName = StringTable->insert(argv[0].getString()); if (argc > 2) { - const char** argv_str = static_cast(malloc((argc - 2) * sizeof(char*))); - for (int i = 0; i < argc - 2; i++) + const char** argv_str = static_cast(malloc(size_t(argc - 1) * sizeof(char*))); + if (argv_str) { - argv_str[i] = argv[i + 2].getString(); + for (int i = 0; i < argc - 2; i++) + { + argv_str[i] = argv[i + 2].getString(); + } } bool result; const char* methodRes = CInterface::CallMethod(object, funcName, argv_str, argc - 2, &result); @@ -1901,7 +1911,7 @@ StringTableEntry getModNameFromPath(const char *path) if(path == NULL || *path == 0) return NULL; - char buf[1024]; + char buf[1024] = {}; buf[0] = 0; if(path[0] == '/' || path[1] == ':') @@ -2148,7 +2158,7 @@ StringTableEntry getPathExpandoValue(U32 expandoIndex) bool expandPath(char* pDstPath, U32 size, const char* pSrcPath, const char* pWorkingDirectoryHint, const bool ensureTrailingSlash) { - char pathBuffer[2048]; + char pathBuffer[2048] = {}; const char* pSrc = pSrcPath; char* pSlash; @@ -2607,7 +2617,7 @@ ConsoleValue _BaseEngineConsoleCallbackHelper::_exec() { ConsoleValue returnValue = Con::_internalExecute( mThis, mArgc, mArgv, false ); mArgc = mInitialArgc; // reset - return std::move(returnValue); + return returnValue; } STR.clearFunctionOffset(); @@ -2617,7 +2627,7 @@ ConsoleValue _BaseEngineConsoleCallbackHelper::_exec() ConsoleValue returnValue = std::move(Con::_internalExecute( mArgc, mArgv )); mArgc = mInitialArgc; // reset args - return std::move(returnValue); + return returnValue; } ConsoleValue _BaseEngineConsoleCallbackHelper::_execLater(SimConsoleThreadExecEvent *evt) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index 4d9d29f42..a93bb84db 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -562,7 +562,7 @@ DefineEngineFunction( stripChars, const char*, ( const char* str, const char* ch "@endtsexample\n" "@ingroup Strings" ) { - S32 len = dStrlen(str) + 1; + U64 len = dStrlen(str) + 1; char* ret = Con::getReturnBuffer( len ); dStrcpy( ret, str, len ); U32 pos = dStrcspn( ret, chars ); @@ -599,11 +599,11 @@ DefineEngineFunction(sanitizeString, const char*, (const char* str), , char* ret = Con::getReturnBuffer(len); dStrcpy(ret, processedString.c_str(), len); - U32 pos = dStrcspn(ret, "-+*/%$&�=()[].?\\\"#,;!~<>|�^{}"); + U64 pos = dStrcspn(ret, "-+*/%$&=:()[].?\\\"#,;!~<>|^{}"); while (pos < dStrlen(ret)) { dStrcpy(ret + pos, ret + pos + 1, len - pos); - pos = dStrcspn(ret, "-+*/%$&�=()[].?\\\"#,;!~<>|�^{}"); + pos = dStrcspn(ret, "-+*/%$&=:()[].?\\\"#,;!~<>|^{}"); } return(ret); } @@ -620,7 +620,7 @@ DefineEngineFunction( strlwr, const char*, ( const char* str ),, "@see strupr\n" "@ingroup Strings" ) { - dsize_t retLen = dStrlen(str) + 1; + U64 retLen = dStrlen(str) + 1; char *ret = Con::getReturnBuffer(retLen); dStrcpy(ret, str, retLen); return dStrlwr(ret); @@ -638,7 +638,7 @@ DefineEngineFunction( strupr, const char*, ( const char* str ),, "@see strlwr\n" "@ingroup Strings" ) { - dsize_t retLen = dStrlen(str) + 1; + U64 retLen = dStrlen(str) + 1; char *ret = Con::getReturnBuffer(retLen); dStrcpy(ret, str, retLen); return dStrupr(ret); @@ -701,7 +701,7 @@ DefineEngineFunction( strreplace, const char*, ( const char* source, const char* count++; } } - S32 retLen = dStrlen(source) + 1 + (toLen - fromLen) * count; + U64 retLen = dStrlen(source) + 1 + U64(toLen - fromLen) * count; char *ret = Con::getReturnBuffer(retLen); U32 scanp = 0; U32 dstp = 0; @@ -714,7 +714,7 @@ DefineEngineFunction( strreplace, const char*, ( const char* source, const char* return ret; } U32 len = subScan - (source + scanp); - dStrncpy(ret + dstp, source + scanp, getMin(len, retLen - dstp)); + dStrncpy(ret + dstp, source + scanp, (U64)getMin(len, retLen - dstp)); dstp += len; dStrcpy(ret + dstp, to, retLen - dstp); dstp += toLen; @@ -940,8 +940,8 @@ DefineEngineFunction( startsWith, bool, ( const char* str, const char* prefix, b char* targetBuf = new char[ targetLen + 1 ]; // copy src and target into buffers - dStrcpy( srcBuf, str, srcLen + 1 ); - dStrcpy( targetBuf, prefix, targetLen + 1 ); + dStrcpy( srcBuf, str, (U64)(srcLen + 1) ); + dStrcpy( targetBuf, prefix, (U64)(targetLen + 1) ); // reassign src/target pointers to lowercase versions str = dStrlwr( srcBuf ); @@ -991,8 +991,8 @@ DefineEngineFunction( endsWith, bool, ( const char* str, const char* suffix, boo char* targetBuf = new char[ targetLen + 1 ]; // copy src and target into buffers - dStrcpy( srcBuf, str, srcLen + 1 ); - dStrcpy( targetBuf, suffix, targetLen + 1 ); + dStrcpy( srcBuf, str, (U64)(srcLen + 1) ); + dStrcpy( targetBuf, suffix, (U64)(targetLen + 1 )); // reassign src/target pointers to lowercase versions str = dStrlwr( srcBuf ); @@ -1858,7 +1858,7 @@ DefineEngineFunction( detag, const char*, ( const char* str ),, if( word == NULL ) return ""; - dsize_t retLen = dStrlen(word + 1) + 1; + U64 retLen = dStrlen(word + 1) + 1; char* ret = Con::getReturnBuffer(retLen); dStrcpy( ret, word + 1, retLen ); return ret; @@ -1924,7 +1924,7 @@ DefineEngineStringlyVariadicFunction( echo, void, 2, 0, "( string message... ) " char *ret = Con::getReturnBuffer(len + 1); ret[0] = 0; for(i = 1; i < argc; i++) - dStrcat(ret, argv[i], len + 1); + dStrcat(ret, argv[i], (U64)(len + 1)); Con::printf("%s", ret); ret[0] = 0; @@ -1948,7 +1948,7 @@ DefineEngineStringlyVariadicFunction( warn, void, 2, 0, "( string message... ) " char *ret = Con::getReturnBuffer(len + 1); ret[0] = 0; for(i = 1; i < argc; i++) - dStrcat(ret, argv[i], len + 1); + dStrcat(ret, argv[i], (U64)(len + 1)); Con::warnf(ConsoleLogEntry::General, "%s", ret); ret[0] = 0; @@ -1972,7 +1972,7 @@ DefineEngineStringlyVariadicFunction( error, void, 2, 0, "( string message... ) char *ret = Con::getReturnBuffer(len + 1); ret[0] = 0; for(i = 1; i < argc; i++) - dStrcat(ret, argv[i], len + 1); + dStrcat(ret, argv[i], (U64)(len + 1)); Con::errorf(ConsoleLogEntry::General, "%s", ret); ret[0] = 0; @@ -2517,7 +2517,7 @@ DefineEngineFunction( isDefined, bool, ( const char* varName, const char* varVal S32 len = dStrlen(name); AssertFatal(len < sizeof(scratchBuffer)-1, "isDefined() - name too long"); - dMemcpy(scratchBuffer, name, len+1); + dMemcpy(scratchBuffer, name, (U64)(len+1)); char * token = dStrtok(scratchBuffer, "."); diff --git a/Engine/source/console/consoleInternal.cpp b/Engine/source/console/consoleInternal.cpp index 803b23b38..dda6d2759 100644 --- a/Engine/source/console/consoleInternal.cpp +++ b/Engine/source/console/consoleInternal.cpp @@ -476,6 +476,8 @@ Dictionary::Entry::Entry(StringTableEntry in_name) fval = 0; sval = NULL; bufferLen = 0; + dataPtr = NULL; + enumTable = NULL; } Dictionary::Entry::~Entry() @@ -809,6 +811,7 @@ ExprEvalState::ExprEvalState() mShouldReset = false; mResetLocked = false; copyVariable = NULL; + currentRegisterArray = NULL; } ExprEvalState::~ExprEvalState() diff --git a/Engine/source/console/consoleInternal.h b/Engine/source/console/consoleInternal.h index f54637513..16b91eb22 100644 --- a/Engine/source/console/consoleInternal.h +++ b/Engine/source/console/consoleInternal.h @@ -359,6 +359,8 @@ public: fval = 0; sval = NULL; bufferLen = 0; + dataPtr = NULL; + enumTable = NULL; } Entry(StringTableEntry name);