Changeset 34095 in webkit for trunk/JavaScriptCore/VM/Machine.cpp


Ignore:
Timestamp:
May 23, 2008, 4:44:40 PM (17 years ago)
Author:
[email protected]
Message:

2008-05-23 Anders Carlsson <[email protected]>

Reviewed by Geoff.

<rdar://problem/5959886> REGRESSION: Assertion failure in JSImmediate::toString when loading GMail (19217)


Change List to store a JSValue* pointer + an offset instead of a JSValue pointer to protect against the case where
a register file changes while a list object points to its buffer.


  • VM/Machine.cpp: (KJS::Machine::privateExecute):
  • kjs/JSActivation.cpp: (KJS::JSActivation::createArgumentsObject):
  • kjs/list.cpp: (KJS::List::getSlice):
  • kjs/list.h: (KJS::List::List): (KJS::List::at): (KJS::List::append): (KJS::List::begin): (KJS::List::end): (KJS::List::buffer):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/VM/Machine.cpp

    r34090 r34095  
    19411941            JSObject* thisObj = static_cast<JSObject*>(r[argv].u.jsValue);
    19421942
    1943             List args(&r[argv + 1].u.jsValue, argc - 1);
     1943            List args(reinterpret_cast<JSValue***>(registerBase), registerOffset + argv + 1, argc - 1);
    19441944
    19451945            registerFile->setSafeForReentry(true);
     
    20592059            int registerOffset = r - (*registerBase);
    20602060
    2061             List args(&r[argv + 1].u.jsValue, argc - 1);
     2061            List args(reinterpret_cast<JSValue***>(registerBase), registerOffset + argv + 1, argc - 1);
     2062
    20622063            registerFile->setSafeForReentry(true);
    20632064            JSValue* returnValue = constructor->construct(exec, args);
Note: See TracChangeset for help on using the changeset viewer.