]> git.kaiwu.me - njs.git/commitdiff
Fixed absolute scope in cloned VMs.
authorDmitry Volyntsev <xeioex@nginx.com>
Thu, 14 Nov 2024 05:14:34 +0000 (21:14 -0800)
committerDmitry Volyntsev <xeioexception@gmail.com>
Fri, 22 Nov 2024 18:53:52 +0000 (10:53 -0800)
src/njs_vm.c

index 908c40c8665886f2f7bcf50bbcf5a1dfa2167752..90428cb42d9c327f4a097b209b57793aeb8b8225 100644 (file)
@@ -384,7 +384,7 @@ njs_vm_clone(njs_vm_t *vm, njs_external_ptr_t external)
     njs_mp_t     *nmp;
     njs_vm_t     *nvm;
     njs_int_t    ret;
-    njs_value_t  **global;
+    njs_value_t  **global, **value;
 
     njs_thread_log_debug("CLONE:");
 
@@ -423,6 +423,24 @@ njs_vm_clone(njs_vm_t *vm, njs_external_ptr_t external)
         goto fail;
     }
 
+    if (nvm->options.unsafe) {
+        nvm->scope_absolute = njs_arr_create(nvm->mem_pool,
+                                             vm->scope_absolute->items,
+                                             sizeof(njs_value_t *));
+        if (njs_slow_path(nvm->scope_absolute == NULL)) {
+            goto fail;
+        }
+
+        value = njs_arr_add_multiple(nvm->scope_absolute,
+                                     vm->scope_absolute->items);
+        if (njs_slow_path(value == NULL)) {
+            goto fail;
+        }
+
+        memcpy(value, vm->scope_absolute->start,
+               vm->scope_absolute->items * sizeof(njs_value_t *));
+    }
+
     nvm->levels[NJS_LEVEL_GLOBAL] = global;
 
     /* globalThis and this */