From d9d25629235107b53eeeefe204535b0529e63019 Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Wed, 27 Nov 2019 18:28:13 +0300 Subject: [PATCH] Fixed TypeError message in ValidateAndApplyPropertyDescriptor(). For Symbol key when object is not extensible. --- src/njs_object_prop.c | 1 + src/njs_value.c | 1 + src/test/njs_unit_test.c | 7 +++++++ 3 files changed, 9 insertions(+) diff --git a/src/njs_object_prop.c b/src/njs_object_prop.c index b93d671d..0a8aa960 100644 --- a/src/njs_object_prop.c +++ b/src/njs_object_prop.c @@ -158,6 +158,7 @@ njs_object_prop_define(njs_vm_t *vm, njs_value_t *object, if (njs_fast_path(ret == NJS_DECLINED)) { if (!njs_object(object)->extensible) { + njs_key_string_get(vm, &pq.key, &pq.lhq.key); njs_type_error(vm, "Cannot add property \"%V\", " "object is not extensible", &pq.lhq.key); return NJS_ERROR; diff --git a/src/njs_value.c b/src/njs_value.c index 7ca818e0..fab95330 100644 --- a/src/njs_value.c +++ b/src/njs_value.c @@ -1125,6 +1125,7 @@ njs_value_property_set(njs_vm_t *vm, njs_value_t *value, njs_value_t *key, } if (njs_slow_path(!njs_object(value)->extensible)) { + njs_key_string_get(vm, &pq.key, &pq.lhq.key); njs_type_error(vm, "Cannot add property \"%V\", " "object is not extensible", &pq.lhq.key); return NJS_ERROR; diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 8466f9eb..be3d5656 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -11962,6 +11962,10 @@ static njs_unit_test_t njs_test[] = "Object.defineProperty(o, 'b', {value:1})"), njs_str("TypeError: Cannot add property \"b\", object is not extensible") }, + { njs_str("var o = Object.preventExtensions({});" + "Object.defineProperty(o, Symbol.unscopables, {})"), + njs_str("TypeError: Cannot add property \"Symbol(Symbol.unscopables)\", object is not extensible") }, + { njs_str("var o = Object.preventExtensions({a:1});" "Object.defineProperties(o, {b:{value:1}})"), njs_str("TypeError: Cannot add property \"b\", object is not extensible") }, @@ -11975,6 +11979,9 @@ static njs_unit_test_t njs_test[] = { njs_str("var o = Object.preventExtensions({a:1}); o.b = 1; o.b"), njs_str("TypeError: Cannot add property \"b\", object is not extensible") }, + { njs_str("var o = Object.preventExtensions({a:1}); o[Symbol.unscopables] = 1"), + njs_str("TypeError: Cannot add property \"Symbol(Symbol.unscopables)\", object is not extensible") }, + { njs_str("Object.preventExtensions()"), njs_str("undefined") }, -- 2.47.3