Ignore:
Timestamp:
Feb 1, 2012, 4:08:00 PM (13 years ago)
Author:
[email protected]
Message:

calling function on catch block scope containing an eval result in wrong this value being passed
https://bugs.webkit.org/show_bug.cgi?id=77581

Reviewed by Oliver Hunt.

javascript:function F(){ return 'F' in this; }; try { throw F; } catch (e) { eval(""); alert(e()); }

Source/JavaScriptCore:

  • bytecompiler/NodesCodegen.cpp:

(JSC::TryNode::emitBytecode):

  • interpreter/Interpreter.cpp:

(JSC::Interpreter::execute):

  • parser/ASTBuilder.h:

(JSC::ASTBuilder::createTryStatement):

  • parser/NodeConstructors.h:

(JSC::TryNode::TryNode):

  • parser/Nodes.h:

(TryNode):

  • parser/Parser.cpp:

(JSC::::parseTryStatement):

  • parser/SyntaxChecker.h:

(JSC::SyntaxChecker::createTryStatement):

  • runtime/JSObject.h:

(JSObject):
(JSC::JSObject::isStaticScopeObject):
(JSC):

LayoutTests:

  • fast/js/eval-var-decl-expected.txt:
  • fast/js/script-tests/eval-var-decl.js:

(checkThis):
(testEvalInCatch):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/parser/ASTBuilder.h

    r106504 r106512  
    420420    }
    421421
    422     StatementNode* createTryStatement(int lineNumber, StatementNode* tryBlock, const Identifier* ident, bool catchHasEval, StatementNode* catchBlock, StatementNode* finallyBlock, int startLine, int endLine)
    423     {
    424         TryNode* result = new (m_globalData) TryNode(lineNumber, tryBlock, *ident, catchHasEval, catchBlock, finallyBlock);
     422    StatementNode* createTryStatement(int lineNumber, StatementNode* tryBlock, const Identifier* ident, StatementNode* catchBlock, StatementNode* finallyBlock, int startLine, int endLine)
     423    {
     424        TryNode* result = new (m_globalData) TryNode(lineNumber, tryBlock, *ident, catchBlock, finallyBlock);
    425425        if (catchBlock)
    426426            usesCatch();
Note: See TracChangeset for help on using the changeset viewer.