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
This commit is contained in:
Szilagyi Adam 2020-08-27 09:52:14 +02:00 committed by GitHub
parent 59ab36088f
commit 24753ddd70
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 25 deletions

View File

@ -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);

View File

@ -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 = {};

View File

@ -1254,7 +1254,6 @@
<test id="built-ins/Proxy/defineProperty/targetdesc-undefined-not-configurable-descriptor-realm.js"><reason></reason></test>
<test id="built-ins/Proxy/defineProperty/targetdesc-undefined-target-is-not-extensible-realm.js"><reason></reason></test>
<test id="built-ins/Proxy/defineProperty/trap-is-not-callable-realm.js"><reason></reason></test>
<test id="built-ins/Proxy/defineProperty/trap-is-undefined-target-is-proxy.js"><reason></reason></test>
<test id="built-ins/Proxy/deleteProperty/trap-is-missing-target-is-proxy.js"><reason></reason></test>
<test id="built-ins/Proxy/deleteProperty/trap-is-not-callable-realm.js"><reason></reason></test>
<test id="built-ins/Proxy/deleteProperty/trap-is-null-target-is-proxy.js"><reason></reason></test>