From 9ee0592d4e4f7eee8c2ffc94c3d5e77424ab711a Mon Sep 17 00:00:00 2001 From: Jason Orendorff Date: Fri, 25 Jun 2010 15:49:17 -0500 Subject: [PATCH] Fix horrible bug in EvalInContext when the result is an object. rs=mrbkap. --- js/src/shell/js.cpp | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index 93b5913fdff..eccec6c8adf 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -2996,25 +2996,27 @@ EvalInContext(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, return true; JSStackFrame *fp = JS_GetScriptedCaller(cx, NULL); - JSAutoCrossCompartmentCall ac; - if (sobj->isCrossCompartmentWrapper()) { - sobj = sobj->unwrap(); - if (!ac.enter(cx, sobj)) - return false; - } + { + JSAutoCrossCompartmentCall ac; + if (sobj->isCrossCompartmentWrapper()) { + sobj = sobj->unwrap(); + if (!ac.enter(cx, sobj)) + return false; + } - OBJ_TO_INNER_OBJECT(cx, sobj); - if (!sobj) - return false; - if (!(sobj->getClass()->flags & JSCLASS_IS_GLOBAL)) { - JS_ReportError(cx, "Invalid scope argument to evalcx"); - return false; - } - if (!JS_EvaluateUCScript(cx, sobj, src, srclen, - fp->script->filename, - JS_PCToLineNumber(cx, fp->script, fp->pc(cx)), - rval)) { - return false; + OBJ_TO_INNER_OBJECT(cx, sobj); + if (!sobj) + return false; + if (!(sobj->getClass()->flags & JSCLASS_IS_GLOBAL)) { + JS_ReportError(cx, "Invalid scope argument to evalcx"); + return false; + } + if (!JS_EvaluateUCScript(cx, sobj, src, srclen, + fp->script->filename, + JS_PCToLineNumber(cx, fp->script, fp->pc(cx)), + rval)) { + return false; + } } return cx->compartment->wrap(cx, rval); }