various fixes and memory corruption bug.

This commit is contained in:
Jeff Hutchinson 2021-09-09 19:30:32 -04:00
parent 27a4868b6e
commit 35b33f1864
4 changed files with 35 additions and 8 deletions

View file

@ -55,7 +55,7 @@ bool CInterface::_isMethod(const char* className, const char* methodName) const
if (mIsMethodCallback)
return mIsMethodCallback(className, methodName);
return NULL;
return false;
}
const char* CInterface::_CallFunction(const char* nameSpace, const char* name, const char **argv, int argc, bool *result) const
@ -93,4 +93,4 @@ TORQUE_API void SetCallbacks(void* ptr, void* methodPtr, void* isMethodPtr, void
CInterface::GetCInterface().SetCallMethodCallback(methodPtr);
CInterface::GetCInterface().SetCallIsMethodCallback(isMethodPtr);
CInterface::GetCInterface().SetMainCallback(mainPtr);
}
}

View file

@ -1643,13 +1643,13 @@ static ConsoleValue _internalExecute(SimObject *object, S32 argc, ConsoleValue a
{
ConsoleValue val;
val.setString(methodRes);
return std::move(val);
return val;
}
if(object->getNamespace())
{
U32 ident = object->getId();
const char* oldIdent = argv[1].getString();
const char* oldIdent = dStrdup(argv[1].getString());
Namespace::Entry *ent = object->getNamespace()->lookup(funcName);
@ -1671,8 +1671,9 @@ static ConsoleValue _internalExecute(SimObject *object, S32 argc, ConsoleValue a
// Twiddle it back
argv[1].setString(oldIdent);
dFree(oldIdent);
return std::move(ret);
return ret;
}
warnf(ConsoleLogEntry::Script, "Con::execute - %d has no namespace: %s", object->getId(), funcName);

View file

@ -2971,7 +2971,8 @@ DefineEngineStringlyVariadicMethod( SimObject, call, const char*, 3, 0, "( strin
"@param args Zero or more arguments for the method.\n"
"@return The result of the method call." )
{
argv[1].setString(argv[2]);
argv[1].setString(argv[2].getString());
ConsoleValue returnValue = Con::execute(object, argc - 1, argv + 1);
return Con::getReturnBuffer(returnValue.getString());
}

View file

@ -969,8 +969,6 @@ TEST(Script, MiscRegressions)
ASSERT_EQ(regression4.getFloat(), 0.5);
Con::setBoolVariable("$Debug::DumpByteCode", true);
ConsoleValue regression5 = RunScript(R"(
function noOpInc()
{
@ -982,6 +980,33 @@ TEST(Script, MiscRegressions)
)");
ASSERT_EQ(regression5.getInt(), 2);
ConsoleValue regression6 = RunScript(R"(
function SimObject::crashMe(%this, %line)
{
return %line @ "1";
}
function doTest()
{
%obj = new SimObject();
for (%i = 0; %i < 99999; %i++)
{
%function = "crashMe";
if (%obj.isMethod(%function))
{
%line = "abcdefg";
%output = %obj.call(%function, %line);
}
}
return true;
}
return doTest();
)");
ASSERT_EQ(regression6.getBool(), true);
}
#endif