From 07cf85143b562753a5eba26db10f49cbdcb90152 Mon Sep 17 00:00:00 2001 From: Alex Piola Date: Fri, 4 Mar 2016 18:03:21 +0100 Subject: [PATCH] fixes crash when callOnChildren Anis and me managed to fix this: #1508 --- Engine/source/console/console.cpp | 6 ++++-- Engine/source/console/simSet.cpp | 7 +++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Engine/source/console/console.cpp b/Engine/source/console/console.cpp index abd6cb249..9fa6ad5c2 100644 --- a/Engine/source/console/console.cpp +++ b/Engine/source/console/console.cpp @@ -1252,7 +1252,7 @@ ConsoleValueRef _internalExecute(SimObject *object, S32 argc, ConsoleValueRef ar if(object->getNamespace()) { U32 ident = object->getId(); - ConsoleValueRef oldIdent = argv[1]; + ConsoleValueRef oldIdent(argv[1]); StringTableEntry funcName = StringTable->insert(argv[0]); Namespace::Entry *ent = object->getNamespace()->lookup(funcName); @@ -1266,7 +1266,9 @@ ConsoleValueRef _internalExecute(SimObject *object, S32 argc, ConsoleValueRef ar } // Twiddle %this argument - argv[1] = (S32)ident; + ConsoleValue func_ident; + func_ident.setIntValue((S32)ident); + argv[1] = ConsoleValueRef::fromValue(&func_ident); SimObject *save = gEvalState.thisObject; gEvalState.thisObject = object; diff --git a/Engine/source/console/simSet.cpp b/Engine/source/console/simSet.cpp index f1f77ee4f..c44b09c36 100644 --- a/Engine/source/console/simSet.cpp +++ b/Engine/source/console/simSet.cpp @@ -233,8 +233,11 @@ void SimSet::callOnChildren( const String &method, S32 argc, ConsoleValueRef arg { // Prep the arguments for the console exec... // Make sure and leave args[1] empty. - ConsoleValueRef args[21]; - args[0] = method.c_str(); + ConsoleValueRef args[21] = { }; + ConsoleValue name_method; + name_method.setStackStringValue(method.c_str()); + args[0] = ConsoleValueRef::fromValue(&name_method); + for (S32 i = 0; i < argc; i++) args[i + 2] = argv[i];