浏览代码

LibJS: Handle the different realms case in ArraySpeciesCreate

davidot 4 年之前
父节点
当前提交
fc9cc74555
共有 1 个文件被更改,包括 8 次插入1 次删除
  1. 8 1
      Userland/Libraries/LibJS/Runtime/ArrayPrototype.cpp

+ 8 - 1
Userland/Libraries/LibJS/Runtime/ArrayPrototype.cpp

@@ -13,6 +13,7 @@
 #include <AK/StringBuilder.h>
 #include <LibJS/Runtime/AbstractOperations.h>
 #include <LibJS/Runtime/Array.h>
+#include <LibJS/Runtime/ArrayConstructor.h>
 #include <LibJS/Runtime/ArrayIterator.h>
 #include <LibJS/Runtime/ArrayPrototype.h>
 #include <LibJS/Runtime/Error.h>
@@ -157,7 +158,13 @@ static Object* array_species_create(GlobalObject& global_object, Object& origina
     if (vm.exception())
         return {};
     if (constructor.is_constructor()) {
-        // FIXME: Check if the returned constructor is from another realm, and if so set constructor to undefined
+        auto& constructor_function = constructor.as_function();
+        if (&constructor_function.global_object() != &global_object) {
+            auto* array_constructor = constructor_function.global_object().array_constructor();
+            if (&constructor_function == array_constructor) {
+                constructor = js_undefined();
+            }
+        }
     }
 
     if (constructor.is_object()) {