From: Dmitry Volyntsev Date: Fri, 13 Aug 2021 12:20:46 +0000 (+0000) Subject: Allowing to create external objects with NULL external pointer. X-Git-Tag: 0.6.2~7 X-Git-Url: http://www.kaiwu.me/postgresql/commit/static/gitweb.js?a=commitdiff_plain;h=8b7b59660a65202515e0f31d6c70e68f8b678504;p=njs.git Allowing to create external objects with NULL external pointer. --- diff --git a/src/njs_extern.c b/src/njs_extern.c index dec5ae4e..8536996e 100644 --- a/src/njs_extern.c +++ b/src/njs_extern.c @@ -179,12 +179,6 @@ njs_external_prop_handler(njs_vm_t *vm, njs_object_prop_t *self, *retval = *setval; } else { - external = njs_vm_external(vm, NJS_PROTO_ID_ANY, value); - if (njs_slow_path(external == NULL)) { - njs_value_undefined_set(retval); - return NJS_OK; - } - ov = njs_mp_alloc(vm->mem_pool, sizeof(njs_object_value_t)); if (njs_slow_path(ov == NULL)) { njs_memory_error(vm); @@ -203,6 +197,8 @@ njs_external_prop_handler(njs_vm_t *vm, njs_object_prop_t *self, ov->object.__proto__ = &vm->prototypes[NJS_OBJ_TYPE_OBJECT].object; ov->object.slots = slots; + external = njs_vm_external(vm, NJS_PROTO_ID_ANY, value); + njs_set_data(&ov->value, external, njs_value_external_tag(value)); njs_set_object_value(retval, ov); } diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 66c80022..811c4488 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -20862,7 +20862,8 @@ static njs_unit_test_t njs_shared_test[] = njs_str("false") }, { njs_str("isFin()"), - njs_str("ReferenceError: \"isFin\" is not defined") }, + njs_str("ReferenceError: \"isFin\" is not defined\n" + " at main (:1)\n") }, { njs_str("isNaN(function(){})"), njs_str("true") }, @@ -20918,6 +20919,11 @@ static njs_unit_test_t njs_shared_test[] = { njs_str("$r.bind('XXX', 37); XXX"), njs_str("37") }, + + { njs_str("var fs = require('fs'); fs.readFileSync()"), + njs_str("TypeError: \"path\" must be a string or Buffer\n" + " at fs.readFileSync (native)\n" + " at main (:1)\n") }, }; @@ -21403,6 +21409,7 @@ typedef struct { njs_bool_t module; njs_uint_t repeat; njs_bool_t unsafe; + njs_bool_t backtrace; } njs_opts_t; @@ -21456,6 +21463,7 @@ njs_unit_test(njs_unit_test_t tests[], size_t num, njs_str_t *name, options.module = opts->module; options.unsafe = opts->unsafe; + options.backtrace = opts->backtrace; vm = njs_vm_create(&options); if (vm == NULL) { @@ -22829,7 +22837,7 @@ static njs_test_suite_t njs_suites[] = njs_unit_test }, { njs_str("shared"), - { .externals = 1, .repeat = 128, .unsafe = 1 }, + { .externals = 1, .repeat = 128, .unsafe = 1, .backtrace = 1 }, njs_shared_test, njs_nitems(njs_shared_test), njs_unit_test },