diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 300b4b69c177..d9fe319a9f55 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -1480,7 +1480,8 @@ JS_EnumerateStandardClasses(JSContext *cx, JSObject *obj) atom = rt->atomState.typeAtoms[JSTYPE_VOID]; if (!AlreadyHasOwnProperty(cx, obj, atom) && !obj->defineProperty(cx, ATOM_TO_JSID(atom), JSVAL_VOID, - JS_PropertyStub, JS_PropertyStub, JSPROP_PERMANENT)) { + JS_PropertyStub, JS_PropertyStub, + JSPROP_PERMANENT | JSPROP_READONLY)) { return JS_FALSE; } diff --git a/js/src/tests/ecma_5/misc/enumerate-undefined.js b/js/src/tests/ecma_5/misc/enumerate-undefined.js new file mode 100644 index 000000000000..163c611b2025 --- /dev/null +++ b/js/src/tests/ecma_5/misc/enumerate-undefined.js @@ -0,0 +1,25 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'enumerate-undefined.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 547087; +var summary = 'JS_EnumerateStandardClasses uses wrong attributes for undefined'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +for (var p in this); + +assertEq(Object.getOwnPropertyDescriptor(this, "undefined").writable, false); + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/js/src/tests/ecma_5/misc/jstests.list b/js/src/tests/ecma_5/misc/jstests.list index 3a1e67a12100..136f00db5816 100644 --- a/js/src/tests/ecma_5/misc/jstests.list +++ b/js/src/tests/ecma_5/misc/jstests.list @@ -1,3 +1,4 @@ url-prefix ../../jsreftest.html?test=ecma_5/misc/ script global-numeric-properties.js script redeclare-var-non-writable-property.js +script enumerate-undefined.js