diff options
author | Gaming4JC <g4jc@hyperbola.info> | 2019-07-07 20:36:27 -0400 |
---|---|---|
committer | Gaming4JC <g4jc@hyperbola.info> | 2019-07-18 22:38:37 -0400 |
commit | 50de15c3a64577f1523ec456df028dc20f539beb (patch) | |
tree | 2d6c6aa269e673386cec47191a508d837c29775c /js/src/jsfun.cpp | |
parent | c1ba97eeae3171fb96283583c33f0238cedacab6 (diff) | |
download | UXP-50de15c3a64577f1523ec456df028dc20f539beb.tar UXP-50de15c3a64577f1523ec456df028dc20f539beb.tar.gz UXP-50de15c3a64577f1523ec456df028dc20f539beb.tar.lz UXP-50de15c3a64577f1523ec456df028dc20f539beb.tar.xz UXP-50de15c3a64577f1523ec456df028dc20f539beb.zip |
1317387: The intrinsic %ThrowTypeError% function should be frozen.
Diffstat (limited to 'js/src/jsfun.cpp')
-rw-r--r-- | js/src/jsfun.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/js/src/jsfun.cpp b/js/src/jsfun.cpp index 3453a59e1..470746d50 100644 --- a/js/src/jsfun.cpp +++ b/js/src/jsfun.cpp @@ -861,6 +861,28 @@ CreateFunctionPrototype(JSContext* cx, JSProtoKey key) if (!throwTypeError || !PreventExtensions(cx, throwTypeError)) return nullptr; + // The "length" property of %ThrowTypeError% is non-configurable, adjust + // the default property attributes accordingly. + Rooted<PropertyDescriptor> nonConfigurableDesc(cx); + nonConfigurableDesc.setAttributes(JSPROP_PERMANENT | JSPROP_IGNORE_READONLY | + JSPROP_IGNORE_ENUMERATE | JSPROP_IGNORE_VALUE); + + RootedId lengthId(cx, NameToId(cx->names().length)); + ObjectOpResult lengthResult; + if (!NativeDefineProperty(cx, throwTypeError, lengthId, nonConfigurableDesc, lengthResult)) + return nullptr; + MOZ_ASSERT(lengthResult); + + // Non-standard: Also change "name" to non-configurable. ECMAScript defines + // %ThrowTypeError% as an anonymous function, i.e. it shouldn't actually + // get an own "name" property. To be consistent with other built-in, + // anonymous functions, we don't delete %ThrowTypeError%'s "name" property. + RootedId nameId(cx, NameToId(cx->names().name)); + ObjectOpResult nameResult; + if (!NativeDefineProperty(cx, throwTypeError, nameId, nonConfigurableDesc, nameResult)) + return nullptr; + MOZ_ASSERT(nameResult); + self->setThrowTypeError(throwTypeError); return functionProto; |