]> git.kaiwu.me - njs.git/commitdiff
Fixed backtraces while traversing imported user modules.
authorDmitry Volyntsev <xeioex@nginx.com>
Mon, 14 Feb 2022 14:10:04 +0000 (14:10 +0000)
committerDmitry Volyntsev <xeioex@nginx.com>
Mon, 14 Feb 2022 14:10:04 +0000 (14:10 +0000)
Previously, njs_builtin_match_native_function(), which is used to build a
backtrace for an exception, assumed that user modules always return
object values, which is not the case.  As a result, njs_object_traverse()
may receive incorrect pointer.

This fix is to only traverse object values.

src/njs_builtin.c
test/js/import_native_module_exception.t.js [new file with mode: 0644]

index 14ef6f23e4325b8b7da495cd3bbd7d4cf0bbb59b..03fac9c95f48d58f0e3d0a9512f9617b6c059258 100644 (file)
@@ -761,13 +761,15 @@ njs_builtin_match_native_function(njs_vm_t *vm, njs_function_t *function,
             break;
         }
 
-        ctx.match = module->name;
+        if (njs_is_object(&module->value)) {
+            ctx.match = module->name;
 
-        ret = njs_object_traverse(vm, njs_object(&module->value), &ctx,
-                                  njs_builtin_traverse);
+            ret = njs_object_traverse(vm, njs_object(&module->value), &ctx,
+                                      njs_builtin_traverse);
 
-        if (ret == NJS_DONE) {
-            goto found;
+            if (ret == NJS_DONE) {
+                goto found;
+            }
         }
     }
 
diff --git a/test/js/import_native_module_exception.t.js b/test/js/import_native_module_exception.t.js
new file mode 100644 (file)
index 0000000..64bdff5
--- /dev/null
@@ -0,0 +1,12 @@
+/*---
+includes: []
+flags: []
+paths: [test/js/module, test/js/module/libs]
+negative:
+  phase: runtime
+---*/
+
+import fs from 'fs';
+import lib from 'lib3.js';
+
+fs.readFileSync({}.a.a);