From 27a4868b6ed203a4e5d0489262056e7fc5d08370 Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Tue, 7 Sep 2021 21:52:36 -0400 Subject: [PATCH] Fix buffer corruption. --- Engine/source/T3D/gameBase/gameConnection.cpp | 9 ++++++--- Engine/source/console/consoleFunctions.cpp | 3 ++- Engine/source/console/simObject.cpp | 3 ++- Engine/source/gui/editor/popupMenu.cpp | 6 ++++-- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Engine/source/T3D/gameBase/gameConnection.cpp b/Engine/source/T3D/gameBase/gameConnection.cpp index ed5c691e5..09cfa13cf 100644 --- a/Engine/source/T3D/gameBase/gameConnection.cpp +++ b/Engine/source/T3D/gameBase/gameConnection.cpp @@ -512,10 +512,13 @@ bool GameConnection::readConnectRequest(BitStream *stream, const char **errorStr connectArgv[2].setString(buffer); // NOTE: Cannot convert over to IMPLEMENT_CALLBACK as it has variable args. - const char *ret = Con::execute(this, mConnectArgc + 3, connectArgv); - if(ret[0]) + ConsoleValue returnValue = Con::execute(this, mConnectArgc + 3, connectArgv); + + StringTableEntry returnStr = StringTable->insert(returnValue.getString()); + + if(returnStr[0]) { - *errorString = ret; + *errorString = returnStr; return false; } return true; diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index d0eccde40..9a57c31c1 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -2286,7 +2286,8 @@ DefineEngineStringlyVariadicFunction( call, const char *, 2, 0, "( string functi "@endtsexample\n\n" "@ingroup Scripting" ) { - return Con::execute( argc - 1, argv + 1 ); + ConsoleValue returnValue = Con::execute(argc - 1, argv + 1); + return Con::getReturnBuffer(returnValue.getString()); } //----------------------------------------------------------------------------- diff --git a/Engine/source/console/simObject.cpp b/Engine/source/console/simObject.cpp index d727e2403..e9cae8130 100644 --- a/Engine/source/console/simObject.cpp +++ b/Engine/source/console/simObject.cpp @@ -2972,7 +2972,8 @@ DefineEngineStringlyVariadicMethod( SimObject, call, const char*, 3, 0, "( strin "@return The result of the method call." ) { argv[1].setString(argv[2]); - return Con::execute( object, argc - 1, argv + 1 ); + ConsoleValue returnValue = Con::execute(object, argc - 1, argv + 1); + return Con::getReturnBuffer(returnValue.getString()); } //----------------------------------------------------------------------------- diff --git a/Engine/source/gui/editor/popupMenu.cpp b/Engine/source/gui/editor/popupMenu.cpp index 2f250ece7..14fff6844 100644 --- a/Engine/source/gui/editor/popupMenu.cpp +++ b/Engine/source/gui/editor/popupMenu.cpp @@ -120,12 +120,14 @@ void PopupMenu::handleSelectEvent(U32 popID, U32 command) //----------------------------------------------------------------------------- bool PopupMenu::onMessageReceived(StringTableEntry queue, const char* event, const char* data) { - return Con::executef(this, "onMessageReceived", queue, event, data); + ConsoleValue returnValue = Con::executef(this, "onMessageReceived", queue, event, data); + return returnValue.getBool(); } bool PopupMenu::onMessageObjectReceived(StringTableEntry queue, Message *msg ) { - return Con::executef(this, "onMessageReceived", queue, Con::getIntArg(msg->getId())); + ConsoleValue returnValue = Con::executef(this, "onMessageReceived", queue, Con::getIntArg(msg->getId())); + return returnValue.getBool(); } //////////////////////////////////////////////////////////////////////////