Revision: 3605 Author: [email protected] Date: Thu Jan 14 06:32:19 2010 Log: Fix crash when using Object.getOwnPropertyDescriptor on an API defined callback property.
Return undefined for Object.getOwnPropertyDescriptor on an API defined callback properties for now. Review URL: http://codereview.chromium.org/542074 http://code.google.com/p/v8/source/detail?r=3605 Modified: /branches/bleeding_edge/src/runtime.cc ======================================= --- /branches/bleeding_edge/src/runtime.cc Wed Jan 13 04:10:57 2010 +++ /branches/bleeding_edge/src/runtime.cc Thu Jan 14 06:32:19 2010 @@ -597,16 +597,22 @@ return Heap::undefined_value(); if (result.type() == CALLBACKS) { - elms->set(0, Heap::true_value()); Object* structure = result.GetCallbackObject(); if (structure->IsProxy()) { - Object* value = obj->GetPropertyWithCallback( - obj, structure, name, result.holder()); - elms->set(1, value); - elms->set(2, Heap::ToBoolean(!result.IsReadOnly())); - } else { + // Property that is internally implemented as a callback. + Object* value = obj->GetPropertyWithCallback( + obj, structure, name, result.holder()); + elms->set(0, Heap::false_value()); + elms->set(1, value); + elms->set(2, Heap::ToBoolean(!result.IsReadOnly())); + } else if (structure->IsFixedArray()) { + // __defineGetter__/__defineSetter__ callback. + elms->set(0, Heap::true_value()); elms->set(1, FixedArray::cast(structure)->get(0)); elms->set(2, FixedArray::cast(structure)->get(1)); + } else { + // TODO(ricow): Handle API callbacks. + return Heap::undefined_value(); } } else { elms->set(0, Heap::false_value());
-- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
