From 6ca6a5f779c25801221d8dfb6a28b2c3359896c6 Mon Sep 17 00:00:00 2001 From: Yves Date: Sat, 4 Jan 2014 21:49:36 +0000 Subject: [PATCH] The patch in 4b65f77438 seems to have fixed the crash, but the initData value doesn't match the JSContext's compartment, so it's theoretically wrong. This should fix it correctly. #Refs 2241 This was SVN commit r14508. --- source/gui/scripting/ScriptFunctions.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/gui/scripting/ScriptFunctions.cpp b/source/gui/scripting/ScriptFunctions.cpp index 739e31e83a..b417e95c1a 100644 --- a/source/gui/scripting/ScriptFunctions.cpp +++ b/source/gui/scripting/ScriptFunctions.cpp @@ -86,10 +86,12 @@ namespace { // Note that the initData argument may only contain clonable data. // Functions aren't supported for example! // TODO: Use LOGERROR to print a friendly error message when the requirements aren't met instead of failing with debug_warn when cloning. -void PushGuiPage(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), std::wstring name, CScriptVal initData) +void PushGuiPage(ScriptInterface::CxPrivate* pCxPrivate, std::wstring name, CScriptVal initData) { - // TODO: we currently use the ScriptInterface of g_GUI. Check the comment in CGUIManager::SwitchPage for a detailed explanation. - g_GUI->PushPage(name, g_GUI->GetScriptInterface()->WriteStructuredClone(initData.get())); + // TODO: Check the comment in CGUIManager::SwitchPage for a detailed explanation of this hack. + CScriptVal cloneSaveInitData; + cloneSaveInitData = g_GUI->GetScriptInterface()->CloneValueFromOtherContext(*(pCxPrivate->pScriptInterface), initData.get()); + g_GUI->PushPage(name, g_GUI->GetScriptInterface()->WriteStructuredClone(cloneSaveInitData.get())); } void SwitchGuiPage(ScriptInterface::CxPrivate* pCxPrivate, std::wstring name, CScriptVal initData)