Browse Source

Fix buffer corruption.

Jeff Hutchinson 4 years ago
parent
commit
27a4868b6e

+ 6 - 3
Engine/source/T3D/gameBase/gameConnection.cpp

@@ -512,10 +512,13 @@ bool GameConnection::readConnectRequest(BitStream *stream, const char **errorStr
    connectArgv[2].setString(buffer);
    connectArgv[2].setString(buffer);
 
 
    // NOTE: Cannot convert over to IMPLEMENT_CALLBACK as it has variable args.
    // 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 false;
    }
    }
    return true;
    return true;

+ 2 - 1
Engine/source/console/consoleFunctions.cpp

@@ -2286,7 +2286,8 @@ DefineEngineStringlyVariadicFunction( call, const char *, 2, 0, "( string functi
    "@endtsexample\n\n"
    "@endtsexample\n\n"
    "@ingroup Scripting" )
    "@ingroup Scripting" )
 {
 {
-   return Con::execute( argc - 1, argv + 1 );
+   ConsoleValue returnValue = Con::execute(argc - 1, argv + 1);
+   return Con::getReturnBuffer(returnValue.getString());
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------

+ 2 - 1
Engine/source/console/simObject.cpp

@@ -2972,7 +2972,8 @@ DefineEngineStringlyVariadicMethod( SimObject, call, const char*, 3, 0, "( strin
    "@return The result of the method call." )
    "@return The result of the method call." )
 {
 {
    argv[1].setString(argv[2]);
    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());
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------

+ 4 - 2
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)
 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 )
 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();
 }
 }
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////