Code to setup/restore security domain is moved to single place in Interpreter.interpret to make checking for correctness easy.
git-svn-id: svn://10.0.0.236/trunk@116753 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
3bb105309c
commit
d18abf02e1
@ -1403,6 +1403,18 @@ public class Interpreter extends LabelTable {
|
|||||||
InterpreterData theData)
|
InterpreterData theData)
|
||||||
throws JavaScriptException
|
throws JavaScriptException
|
||||||
{
|
{
|
||||||
|
if (cx.interpreterSecurityDomain != theData.securityDomain) {
|
||||||
|
// If securityDomain is different, update domain in Cotext
|
||||||
|
// and call self under new domain
|
||||||
|
Object savedDomain = cx.interpreterSecurityDomain;
|
||||||
|
cx.interpreterSecurityDomain = theData.securityDomain;
|
||||||
|
try {
|
||||||
|
return interpret(cx, scope, thisObj, args, fnOrScript, theData);
|
||||||
|
} finally {
|
||||||
|
cx.interpreterSecurityDomain = savedDomain;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
Object lhs;
|
Object lhs;
|
||||||
|
|
||||||
@ -1480,13 +1492,6 @@ public class Interpreter extends LabelTable {
|
|||||||
cx.pushFrame(frame);
|
cx.pushFrame(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Save the security domain. Must restore upon normal exit.
|
|
||||||
* If we exit the interpreter loop by throwing an exception,
|
|
||||||
* set cx.interpreterSecurityDomain to null, and require the
|
|
||||||
* catching function to restore it.
|
|
||||||
*/
|
|
||||||
Object savedSecurityDomain = cx.interpreterSecurityDomain;
|
|
||||||
cx.interpreterSecurityDomain = theData.securityDomain;
|
|
||||||
Object result = undefined;
|
Object result = undefined;
|
||||||
|
|
||||||
int pcPrevBranch = pc;
|
int pcPrevBranch = pc;
|
||||||
@ -2212,8 +2217,6 @@ public class Interpreter extends LabelTable {
|
|||||||
pc++;
|
pc++;
|
||||||
}
|
}
|
||||||
catch (Throwable ex) {
|
catch (Throwable ex) {
|
||||||
cx.interpreterSecurityDomain = null;
|
|
||||||
|
|
||||||
if (instructionThreshold != 0) {
|
if (instructionThreshold != 0) {
|
||||||
if (instructionCount < 0) {
|
if (instructionCount < 0) {
|
||||||
// throw during function call
|
// throw during function call
|
||||||
@ -2315,10 +2318,8 @@ public class Interpreter extends LabelTable {
|
|||||||
scope = (Scriptable)stack[TRY_SCOPE_SHFT + tryStackTop];
|
scope = (Scriptable)stack[TRY_SCOPE_SHFT + tryStackTop];
|
||||||
stackTop = 0;
|
stackTop = 0;
|
||||||
stack[0] = errObj;
|
stack[0] = errObj;
|
||||||
cx.interpreterSecurityDomain = theData.securityDomain;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cx.interpreterSecurityDomain = savedSecurityDomain;
|
|
||||||
if (frame != null)
|
if (frame != null)
|
||||||
cx.popFrame();
|
cx.popFrame();
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user