diff --git a/source/gui/CGUISetting.cpp b/source/gui/CGUISetting.cpp index ccb5d065ab..a06513419d 100644 --- a/source/gui/CGUISetting.cpp +++ b/source/gui/CGUISetting.cpp @@ -51,6 +51,7 @@ bool CGUISetting::FromJSVal(JSContext* cx, JS::HandleValue Value, con if (!settingValue.ParseString(m_pObject.GetGUI(), name)) { + JSAutoRequest rq(cx); JS_ReportError(cx, "Invalid color '%s'", name.c_str()); return false; } diff --git a/source/gui/scripting/GuiScriptConversions.cpp b/source/gui/scripting/GuiScriptConversions.cpp index f0ae9e59e4..343519a920 100644 --- a/source/gui/scripting/GuiScriptConversions.cpp +++ b/source/gui/scripting/GuiScriptConversions.cpp @@ -166,18 +166,21 @@ template<> bool ScriptInterface::FromJSVal(JSContext* cx, JS::HandleValue { if (!v.isObject()) { + JSAutoRequest rq(cx); JS_ReportError(cx, "CSize value must be an object!"); return false; } if (!FromJSProperty(cx, v, "width", out.cx)) { + JSAutoRequest rq(cx); JS_ReportError(cx, "Failed to get CSize.cx property"); return false; } if (!FromJSProperty(cx, v, "height", out.cy)) { + JSAutoRequest rq(cx); JS_ReportError(cx, "Failed to get CSize.cy property"); return false; } @@ -194,18 +197,21 @@ template<> bool ScriptInterface::FromJSVal(JSContext* cx, JS::HandleValue { if (!v.isObject()) { + JSAutoRequest rq(cx); JS_ReportError(cx, "CPos value must be an object!"); return false; } if (!FromJSProperty(cx, v, "x", out.x)) { + JSAutoRequest rq(cx); JS_ReportError(cx, "Failed to get CPos.x property"); return false; } if (!FromJSProperty(cx, v, "y", out.y)) { + JSAutoRequest rq(cx); JS_ReportError(cx, "Failed to get CPos.y property"); return false; } @@ -273,6 +279,7 @@ template<> void ScriptInterface::ToJSVal(JSContext* cx, JS::MutableHand default: word = "error"; + JSAutoRequest rq(cx); JS_ReportError(cx, "Invalid EVAlign"); break; } @@ -293,6 +300,7 @@ template<> bool ScriptInterface::FromJSVal(JSContext* cx, JS::HandleVal else { out = EVAlign_Top; + JSAutoRequest rq(cx); JS_ReportError(cx, "Invalid alignment (should be 'left', 'right' or 'center')"); return false; } @@ -315,6 +323,7 @@ template<> void ScriptInterface::ToJSVal(JSContext* cx, JS::MutableHandl break; default: word = "error"; + JSAutoRequest rq(cx); JS_ReportError(cx, "Invalid alignment (should be 'left', 'right' or 'center')"); break; } @@ -335,6 +344,7 @@ template<> bool ScriptInterface::FromJSVal(JSContext* cx, JS::HandleValu else { out = EAlign_Left; + JSAutoRequest rq(cx); JS_ReportError(cx, "Invalid alignment (should be 'left', 'right' or 'center')"); return false; } diff --git a/source/ps/scripting/JSInterface_Game.cpp b/source/ps/scripting/JSInterface_Game.cpp index 7d967f4545..6533965a94 100644 --- a/source/ps/scripting/JSInterface_Game.cpp +++ b/source/ps/scripting/JSInterface_Game.cpp @@ -101,7 +101,9 @@ bool JSI_Game::IsPaused(ScriptInterface::CxPrivate* pCxPrivate) { if (!g_Game) { - JS_ReportError(pCxPrivate->pScriptInterface->GetContext(), "Game is not started"); + JSContext* cx = pCxPrivate->pScriptInterface->GetContext(); + JSAutoRequest rq(cx); + JS_ReportError(cx, "Game is not started"); return false; } @@ -112,7 +114,9 @@ void JSI_Game::SetPaused(ScriptInterface::CxPrivate* pCxPrivate, bool pause, boo { if (!g_Game) { - JS_ReportError(pCxPrivate->pScriptInterface->GetContext(), "Game is not started"); + JSContext* cx = pCxPrivate->pScriptInterface->GetContext(); + JSAutoRequest rq(cx); + JS_ReportError(cx, "Game is not started"); return; } diff --git a/source/ps/scripting/JSInterface_VFS.cpp b/source/ps/scripting/JSInterface_VFS.cpp index 71dd1c777b..6f929e8dc7 100644 --- a/source/ps/scripting/JSInterface_VFS.cpp +++ b/source/ps/scripting/JSInterface_VFS.cpp @@ -228,10 +228,9 @@ bool JSI_VFS::PathRestrictionMet(ScriptInterface::CxPrivate* pCxPrivate, const s allowedPaths += L"\"" + validPaths[i] + L"\""; } - JS_ReportError( - pCxPrivate->pScriptInterface->GetContext(), - "This part of the engine may only read from %s!", - utf8_from_wstring(allowedPaths).c_str()); + JSContext* cx = pCxPrivate->pScriptInterface->GetContext(); + JSAutoRequest rq(cx); + JS_ReportError(cx, "This part of the engine may only read from %s!", utf8_from_wstring(allowedPaths).c_str()); return false; } diff --git a/source/scriptinterface/ScriptInterface.cpp b/source/scriptinterface/ScriptInterface.cpp index d7ac77666c..10f39bfbdb 100644 --- a/source/scriptinterface/ScriptInterface.cpp +++ b/source/scriptinterface/ScriptInterface.cpp @@ -214,6 +214,7 @@ bool deepfreeze(JSContext* cx, uint argc, JS::Value* vp) if (args.length() != 1 || !args.get(0).isObject()) { + JSAutoRequest rq(cx); JS_ReportError(cx, "deepfreeze requires exactly one object as an argument."); return false; } diff --git a/source/simulation2/scripting/EngineScriptConversions.cpp b/source/simulation2/scripting/EngineScriptConversions.cpp index 352e9ff6e8..5deed27de0 100644 --- a/source/simulation2/scripting/EngineScriptConversions.cpp +++ b/source/simulation2/scripting/EngineScriptConversions.cpp @@ -90,10 +90,11 @@ template<> void ScriptInterface::ToJSVal(JSContext* cx, JS::M template<> bool ScriptInterface::FromJSVal(JSContext* cx, JS::HandleValue v, CColor& out) { + JSAutoRequest rq(cx); + if (!v.isObject()) FAIL("JS::HandleValue not an object"); - JSAutoRequest rq(cx); JS::RootedObject obj(cx, &v.toObject()); JS::RootedValue r(cx); @@ -262,10 +263,11 @@ template<> void ScriptInterface::ToJSVal >(JSContext* cx, JS::MutableH template<> bool ScriptInterface::FromJSVal(JSContext* cx, JS::HandleValue v, TNSpline& out) { + JSAutoRequest rq(cx); + if (!v.isObject()) FAIL("Argument must be an object"); - JSAutoRequest rq(cx); JS::RootedObject obj(cx, &v.toObject()); bool isArray; if (!JS_IsArrayObject(cx, obj, &isArray) || !isArray) @@ -300,10 +302,11 @@ template<> bool ScriptInterface::FromJSVal(JSContext* cx, JS::HandleVa template<> bool ScriptInterface::FromJSVal(JSContext* cx, JS::HandleValue v, CCinemaPath& out) { + JSAutoRequest rq(cx); + if (!v.isObject()) FAIL("Argument must be an object"); - JSAutoRequest rq(cx); JS::RootedObject obj(cx, &v.toObject()); CCinemaData pathData;