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.
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;
+ }
}
}
--- /dev/null
+/*---
+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);