Changeset 209015 in webkit


Ignore:
Timestamp:
Nov 28, 2016 2:13:57 PM (7 years ago)
Author:
mark.lam@apple.com
Message:

Fix exception scope verification failures in ReflectObject.cpp.
https://bugs.webkit.org/show_bug.cgi?id=165066

Reviewed by Saam Barati.

  • runtime/ReflectObject.cpp:

(JSC::reflectObjectConstruct):
(JSC::reflectObjectDefineProperty):
(JSC::reflectObjectEnumerate):
(JSC::reflectObjectGet):
(JSC::reflectObjectGetOwnPropertyDescriptor):
(JSC::reflectObjectGetPrototypeOf):
(JSC::reflectObjectOwnKeys):
(JSC::reflectObjectSet):

Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r209011 r209015  
     12016-11-28  Mark Lam  <mark.lam@apple.com>
     2
     3        Fix exception scope verification failures in ReflectObject.cpp.
     4        https://bugs.webkit.org/show_bug.cgi?id=165066
     5
     6        Reviewed by Saam Barati.
     7
     8        * runtime/ReflectObject.cpp:
     9        (JSC::reflectObjectConstruct):
     10        (JSC::reflectObjectDefineProperty):
     11        (JSC::reflectObjectEnumerate):
     12        (JSC::reflectObjectGet):
     13        (JSC::reflectObjectGetOwnPropertyDescriptor):
     14        (JSC::reflectObjectGetPrototypeOf):
     15        (JSC::reflectObjectOwnKeys):
     16        (JSC::reflectObjectSet):
     17
    1182016-11-24  Mark Lam  <mark.lam@apple.com>
    219
  • trunk/Source/JavaScriptCore/runtime/ReflectObject.cpp

    r206386 r209015  
    126126    RETURN_IF_EXCEPTION(scope, encodedJSValue());
    127127
     128    scope.release();
    128129    return JSValue::encode(construct(exec, target, constructType, constructData, arguments, newTarget));
    129130}
     
    142143
    143144    PropertyDescriptor descriptor;
    144     if (!toPropertyDescriptor(exec, exec->argument(2), descriptor))
    145         return JSValue::encode(jsUndefined());
     145    bool success = toPropertyDescriptor(exec, exec->argument(2), descriptor);
     146    ASSERT(!scope.exception() == success);
     147    if (UNLIKELY(!success))
     148        return encodedJSValue();
    146149    ASSERT((descriptor.attributes() & Accessor) || (!descriptor.isAccessorDescriptor()));
    147150    ASSERT(!scope.exception());
     
    150153    bool shouldThrow = false;
    151154    JSObject* targetObject = asObject(target);
     155    scope.release();
    152156    return JSValue::encode(jsBoolean(targetObject->methodTable(vm)->defineOwnProperty(targetObject, exec, propertyName, descriptor, shouldThrow)));
    153157}
     
    163167    if (!target.isObject())
    164168        return JSValue::encode(throwTypeError(exec, scope, ASCIILiteral("Reflect.enumerate requires the first argument be an object")));
     169    scope.release();
    165170    return JSValue::encode(JSPropertyNameIterator::create(exec, exec->lexicalGlobalObject()->propertyNameIteratorStructure(), asObject(target)));
    166171}
     
    184189
    185190    PropertySlot slot(receiver, PropertySlot::InternalMethodType::Get);
     191    scope.release();
    186192    return JSValue::encode(target.get(exec, propertyName, slot));
    187193}
     
    200206    RETURN_IF_EXCEPTION(scope, encodedJSValue());
    201207
     208    scope.release();
    202209    return JSValue::encode(objectConstructorGetOwnPropertyDescriptor(exec, asObject(target), key));
    203210}
     
    212219    if (!target.isObject())
    213220        return JSValue::encode(throwTypeError(exec, scope, ASCIILiteral("Reflect.getPrototypeOf requires the first argument be an object")));
    214     return JSValue::encode(asObject(target)->getPrototype(exec->vm(), exec));
     221    scope.release();
     222    return JSValue::encode(asObject(target)->getPrototype(vm, exec));
    215223}
    216224
     
    239247    if (!target.isObject())
    240248        return JSValue::encode(throwTypeError(exec, scope, ASCIILiteral("Reflect.ownKeys requires the first argument be an object")));
     249    scope.release();
    241250    return JSValue::encode(ownPropertyKeys(exec, jsCast<JSObject*>(target), PropertyNameMode::StringsAndSymbols, DontEnumPropertiesMode::Include));
    242251}
     
    278287    bool shouldThrowIfCantSet = false;
    279288    PutPropertySlot slot(receiver, shouldThrowIfCantSet);
     289    scope.release();
    280290    return JSValue::encode(jsBoolean(targetObject->methodTable(vm)->put(targetObject, exec, propertyName, exec->argument(2), slot)));
    281291}
Note: See TracChangeset for help on using the changeset viewer.