summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjanekptacijarabaci <janekptacijarabaci@seznam.cz>2018-04-14 08:51:05 +0200
committerjanekptacijarabaci <janekptacijarabaci@seznam.cz>2018-04-14 08:51:05 +0200
commite2719e1dbf7b706cd5ec8b3ecd899d2fc063c20f (patch)
tree49b484a4a14ab2c8418f0e439122f26458ddcb59
parenta7f7a2231938e49ca2521fd417be7a313045c006 (diff)
downloadUXP-e2719e1dbf7b706cd5ec8b3ecd899d2fc063c20f.tar
UXP-e2719e1dbf7b706cd5ec8b3ecd899d2fc063c20f.tar.gz
UXP-e2719e1dbf7b706cd5ec8b3ecd899d2fc063c20f.tar.lz
UXP-e2719e1dbf7b706cd5ec8b3ecd899d2fc063c20f.tar.xz
UXP-e2719e1dbf7b706cd5ec8b3ecd899d2fc063c20f.zip
Bug 1326453 - Part 3: Don't throw a TypeError when SetPrototypeOf for module namespace objects is called with null
-rw-r--r--js/src/builtin/ModuleObject.cpp2
-rw-r--r--js/src/jit-test/tests/modules/import-namespace.js4
2 files changed, 5 insertions, 1 deletions
diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp
index f7323e852..28a3329a8 100644
--- a/js/src/builtin/ModuleObject.cpp
+++ b/js/src/builtin/ModuleObject.cpp
@@ -345,6 +345,8 @@ bool
ModuleNamespaceObject::ProxyHandler::setPrototype(JSContext* cx, HandleObject proxy,
HandleObject proto, ObjectOpResult& result) const
{
+ if (!proto)
+ return result.succeed();
return result.failCantSetProto();
}
diff --git a/js/src/jit-test/tests/modules/import-namespace.js b/js/src/jit-test/tests/modules/import-namespace.js
index 71a1ce7df..27d0193aa 100644
--- a/js/src/jit-test/tests/modules/import-namespace.js
+++ b/js/src/jit-test/tests/modules/import-namespace.js
@@ -39,7 +39,9 @@ assertEq(getModuleEnvironmentValue(b, "x"), 3);
// Test module namespace internal methods as defined in 9.4.6
assertEq(Object.getPrototypeOf(ns), null);
-assertThrowsInstanceOf(() => Object.setPrototypeOf(ns, null), TypeError);
+assertEq(Reflect.setPrototypeOf(ns, null), true);
+assertEq(Reflect.setPrototypeOf(ns, Object.prototype), false);
+assertThrowsInstanceOf(() => Object.setPrototypeOf(ns, {}), TypeError);
assertThrowsInstanceOf(function() { ns.foo = 1; }, TypeError);
assertEq(Object.isExtensible(ns), false);
Object.preventExtensions(ns);