Skip to content

Commit

Permalink
further console cleanups. mostly of the form of correcting uninitiali…
Browse files Browse the repository at this point in the history
…zed values. some arithmatic sizes
  • Loading branch information
Azaezel committed May 1, 2023
1 parent a66ff64 commit 833149e
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 36 deletions.
4 changes: 2 additions & 2 deletions Engine/source/console/compiledEval.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -2346,7 +2346,7 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa
AssertFatal(!(_STK < stackStart), "String stack popped too much in script exec");
#endif

return std::move(returnValue);
return returnValue;
}

//------------------------------------------------------------
46 changes: 28 additions & 18 deletions Engine/source/console/console.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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--;
Expand Down Expand Up @@ -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 )
{
Expand Down Expand Up @@ -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<char*>(entry.mString), pos, logStringLen);

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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<const char**>(malloc((argc - 1) * sizeof(char*)));
for (int i = 0; i < argc - 1; i++)
const char** argv_str = static_cast<const char**>(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;
Expand Down Expand Up @@ -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();
Expand All @@ -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<const char**>(malloc((argc - 2) * sizeof(char*)));
for (int i = 0; i < argc - 2; i++)
const char** argv_str = static_cast<const char**>(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);
Expand Down Expand Up @@ -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] == ':')
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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();
Expand All @@ -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)
Expand Down
32 changes: 16 additions & 16 deletions Engine/source/console/consoleFunctions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
Expand Down Expand Up @@ -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);
}
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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 );
Expand Down Expand Up @@ -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 );
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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, ".");

Expand Down
3 changes: 3 additions & 0 deletions Engine/source/console/consoleInternal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,8 @@ Dictionary::Entry::Entry(StringTableEntry in_name)
fval = 0;
sval = NULL;
bufferLen = 0;
dataPtr = NULL;
enumTable = NULL;
}

Dictionary::Entry::~Entry()
Expand Down Expand Up @@ -809,6 +811,7 @@ ExprEvalState::ExprEvalState()
mShouldReset = false;
mResetLocked = false;
copyVariable = NULL;
currentRegisterArray = NULL;
}

ExprEvalState::~ExprEvalState()
Expand Down
2 changes: 2 additions & 0 deletions Engine/source/console/consoleInternal.h
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,8 @@ class Dictionary
fval = 0;
sval = NULL;
bufferLen = 0;
dataPtr = NULL;
enumTable = NULL;
}

Entry(StringTableEntry name);
Expand Down

0 comments on commit 833149e

Please sign in to comment.