Changeset 209015 in webkit
- Timestamp:
- Nov 28, 2016 2:13:57 PM (7 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r209011 r209015 1 2016-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 1 18 2016-11-24 Mark Lam <mark.lam@apple.com> 2 19 -
trunk/Source/JavaScriptCore/runtime/ReflectObject.cpp
r206386 r209015 126 126 RETURN_IF_EXCEPTION(scope, encodedJSValue()); 127 127 128 scope.release(); 128 129 return JSValue::encode(construct(exec, target, constructType, constructData, arguments, newTarget)); 129 130 } … … 142 143 143 144 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(); 146 149 ASSERT((descriptor.attributes() & Accessor) || (!descriptor.isAccessorDescriptor())); 147 150 ASSERT(!scope.exception()); … … 150 153 bool shouldThrow = false; 151 154 JSObject* targetObject = asObject(target); 155 scope.release(); 152 156 return JSValue::encode(jsBoolean(targetObject->methodTable(vm)->defineOwnProperty(targetObject, exec, propertyName, descriptor, shouldThrow))); 153 157 } … … 163 167 if (!target.isObject()) 164 168 return JSValue::encode(throwTypeError(exec, scope, ASCIILiteral("Reflect.enumerate requires the first argument be an object"))); 169 scope.release(); 165 170 return JSValue::encode(JSPropertyNameIterator::create(exec, exec->lexicalGlobalObject()->propertyNameIteratorStructure(), asObject(target))); 166 171 } … … 184 189 185 190 PropertySlot slot(receiver, PropertySlot::InternalMethodType::Get); 191 scope.release(); 186 192 return JSValue::encode(target.get(exec, propertyName, slot)); 187 193 } … … 200 206 RETURN_IF_EXCEPTION(scope, encodedJSValue()); 201 207 208 scope.release(); 202 209 return JSValue::encode(objectConstructorGetOwnPropertyDescriptor(exec, asObject(target), key)); 203 210 } … … 212 219 if (!target.isObject()) 213 220 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)); 215 223 } 216 224 … … 239 247 if (!target.isObject()) 240 248 return JSValue::encode(throwTypeError(exec, scope, ASCIILiteral("Reflect.ownKeys requires the first argument be an object"))); 249 scope.release(); 241 250 return JSValue::encode(ownPropertyKeys(exec, jsCast<JSObject*>(target), PropertyNameMode::StringsAndSymbols, DontEnumPropertiesMode::Include)); 242 251 } … … 278 287 bool shouldThrowIfCantSet = false; 279 288 PutPropertySlot slot(receiver, shouldThrowIfCantSet); 289 scope.release(); 280 290 return JSValue::encode(jsBoolean(targetObject->methodTable(vm)->put(targetObject, exec, propertyName, exec->argument(2), slot))); 281 291 }
Note: See TracChangeset
for help on using the changeset viewer.