details: http://hg.nginx.org/njs/rev/ee72fc2329bf branches: changeset: 507:ee72fc2329bf user: Dmitry Volyntsev <xei...@nginx.com> date: Thu Apr 26 19:24:55 2018 +0300 description: Fixed handling of missing arg of Object.getOwnPropertyDescriptor().
This fixes #5 issue on GitHub. diffstat: njs/njs_object.c | 15 ++++++++++----- njs/test/njs_unit_test.c | 8 +++++++- 2 files changed, 17 insertions(+), 6 deletions(-) diffs (57 lines): diff -r eb2caababd77 -r ee72fc2329bf njs/njs_object.c --- a/njs/njs_object.c Thu Apr 26 19:20:04 2018 +0300 +++ b/njs/njs_object.c Thu Apr 26 19:24:55 2018 +0300 @@ -629,9 +629,14 @@ njs_object_get_own_property_descriptor(n value = njs_arg(args, nargs, 1); if (!njs_is_object(value)) { - njs_type_error(vm, "cannot convert %s argument to object", - njs_type_string(value->type)); - return NXT_ERROR; + if (njs_is_null_or_void(value)) { + njs_type_error(vm, "cannot convert %s argument to object", + njs_type_string(value->type)); + return NXT_ERROR; + } + + vm->retval = njs_value_void; + return NXT_OK; } prop = NULL; @@ -662,7 +667,7 @@ njs_object_get_own_property_descriptor(n ret = nxt_lvlhsh_find(&value->data.u.object->hash, &lhq); if (ret != NXT_OK) { - vm->retval = njs_string_void; + vm->retval = njs_value_void; return NXT_OK; } @@ -1164,7 +1169,7 @@ static const njs_object_prop_t njs_obje .type = NJS_METHOD, .name = njs_long_string("getOwnPropertyDescriptor"), .value = njs_native_function(njs_object_get_own_property_descriptor, 0, - NJS_SKIP_ARG, NJS_OBJECT_ARG, + NJS_SKIP_ARG, NJS_SKIP_ARG, NJS_STRING_ARG), }, diff -r eb2caababd77 -r ee72fc2329bf njs/test/njs_unit_test.c --- a/njs/test/njs_unit_test.c Thu Apr 26 19:20:04 2018 +0300 +++ b/njs/test/njs_unit_test.c Thu Apr 26 19:24:55 2018 +0300 @@ -6603,7 +6603,13 @@ static njs_unit_test_t njs_test[] = nxt_string("undefined") }, { nxt_string("Object.getOwnPropertyDescriptor(1, '0')"), - nxt_string("TypeError: cannot convert number argument to object") }, + nxt_string("undefined") }, + + { nxt_string("Object.getOwnPropertyDescriptor()"), + nxt_string("TypeError: cannot convert void argument to object") }, + + { nxt_string("Object.getOwnPropertyDescriptor(undefined)"), + nxt_string("TypeError: cannot convert void argument to object") }, { nxt_string("Object.defineProperty(Object.freeze({}), 'b', {})"), nxt_string("TypeError: object is not extensible") }, _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel