From ae08adc55d3ef2206af71f656823ad56c67dc928 Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Sat, 15 May 2010 11:21:40 +0000 Subject: [PATCH] # Fix possible GC crash bugs This was SVN commit r7546. --- source/gui/scripting/ScriptFunctions.cpp | 3 ++- source/simulation2/scripting/EngineScriptConversions.cpp | 5 +---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/source/gui/scripting/ScriptFunctions.cpp b/source/gui/scripting/ScriptFunctions.cpp index dad0ea162a..4349d0fb0e 100644 --- a/source/gui/scripting/ScriptFunctions.cpp +++ b/source/gui/scripting/ScriptFunctions.cpp @@ -85,7 +85,8 @@ CScriptVal GuiInterfaceCall(void* cbdata, std::wstring name, CScriptVal data) if (g_Game && g_Game->GetLocalPlayer()) player = g_Game->GetLocalPlayer()->GetPlayerID(); - CScriptVal ret = gui->ScriptCall(player, name, sim->GetScriptInterface().CloneValueFromOtherContext(guiManager->GetScriptInterface(), data.get())); + CScriptValRooted arg (sim->GetScriptInterface().GetContext(), sim->GetScriptInterface().CloneValueFromOtherContext(guiManager->GetScriptInterface(), data.get())); + CScriptVal ret (gui->ScriptCall(player, name, arg.get())); return guiManager->GetScriptInterface().CloneValueFromOtherContext(sim->GetScriptInterface(), ret.get()); } diff --git a/source/simulation2/scripting/EngineScriptConversions.cpp b/source/simulation2/scripting/EngineScriptConversions.cpp index 296fc1ca39..95d9e8458c 100644 --- a/source/simulation2/scripting/EngineScriptConversions.cpp +++ b/source/simulation2/scripting/EngineScriptConversions.cpp @@ -80,13 +80,10 @@ static jsval ConvertCParamNode(JSContext* cx, CParamNode const& val) // Got child nodes - convert this node into a hash-table-style object: - ScriptInterface::LocalRootScope scope(cx); - if (!scope.OK()) - return JSVAL_VOID; // TODO: report error - JSObject* obj = JS_NewObject(cx, NULL, NULL, NULL); if (!obj) return JSVAL_VOID; // TODO: report error + CScriptValRooted objRoot(cx, OBJECT_TO_JSVAL(obj)); for (std::map::const_iterator it = children.begin(); it != children.end(); ++it) {