From 24753ddd70e46cd5bb09e975cdce8452d4ec6eae Mon Sep 17 00:00:00 2001 From: Szilagyi Adam Date: Thu, 27 Aug 2020 09:52:14 +0200 Subject: [PATCH] Minor fix to ecma_builtin_object_object_define_property (#4124) DefineOwnProperty result could be false, and we should throw an error in that case. JerryScript-DCO-1.0-Signed-off-by: Adam Szilagyi aszilagy@inf.u-szeged.hu --- .../builtin-objects/ecma-builtin-object.c | 7 ++++ .../es.next/proxy_define_own_property.js | 40 ++++++++----------- tests/test262-esnext-excludelist.xml | 1 - 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-object.c b/jerry-core/ecma/builtin-objects/ecma-builtin-object.c index fa7b026e8..1a3e45dd0 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-object.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-object.c @@ -1019,6 +1019,13 @@ ecma_builtin_object_object_define_property (ecma_object_t *obj_p, /**< routine's return define_own_prop_ret; } + if (ecma_is_value_false (define_own_prop_ret)) + { + return ecma_raise_type_error (ECMA_ERR_MSG ("The requested property update cannot be performed.")); + } + + JERRY_ASSERT (ecma_is_value_true (define_own_prop_ret)); + ecma_ref_object (obj_p); ecma_free_value (define_own_prop_ret); diff --git a/tests/jerry/es.next/proxy_define_own_property.js b/tests/jerry/es.next/proxy_define_own_property.js index cef7e391f..ef10ecbf7 100644 --- a/tests/jerry/es.next/proxy_define_own_property.js +++ b/tests/jerry/es.next/proxy_define_own_property.js @@ -56,33 +56,25 @@ var handler = { var proxy = new Proxy(target, handler); -Object.defineProperty(proxy, "bar", desc); +try { + Object.defineProperty(proxy, "bar", desc); + assert(false); +} catch (e) { + assert(e instanceof TypeError); +} -assert(proxy.bar === 1); +var bar = Object.getOwnPropertyDescriptor(proxy, "bar"); +assert(bar.value === 1); +assert(bar.writable); +assert(bar.configurable); -/* TODO - remove this comment when [[GetOwnProperty]] is implemented -proxy.bar = 2; -assert(proxy.bar === 2); -*/ +try { + Object.defineProperty(proxy, "name", {}); + assert(false); +} catch (e) { + assert(e instanceof TypeError); +} -delete proxy.bar; -assert(proxy.bar === undefined); - -/* TODO - remove this comment when [[GetOwnProperty]] is implemented -Object.defineProperty(proxy, "name", { - get() { - return this._name; - }, - set(value) { - this._name = value; - } -}); - -proxy.name = "foo"; - -assert(proxy.name === "foo"); -assert(target.name === "foo"); -*/ // test when trap is not callable var target = {}; diff --git a/tests/test262-esnext-excludelist.xml b/tests/test262-esnext-excludelist.xml index 5bcba5a72..02ee2b6b1 100644 --- a/tests/test262-esnext-excludelist.xml +++ b/tests/test262-esnext-excludelist.xml @@ -1254,7 +1254,6 @@ -