From 7dc2d1dcd7c4cd2db0dab7f6788bd8a1ec01a101 Mon Sep 17 00:00:00 2001 From: Daniel Balla Date: Mon, 7 Oct 2019 17:27:34 +0300 Subject: [PATCH] Fix delete operation in Set objects (#3203) Delete should return false if an element doesn't exist in a set. ECMA_VALUE_EMPTY wasn't checked in case of a deleted property. JerryScript-DCO-1.0-Signed-off-by: Daniel Balla dballa@inf.u-szeged.hu --- jerry-core/ecma/operations/ecma-container-object.c | 2 +- tests/jerry/es2015/set.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/jerry-core/ecma/operations/ecma-container-object.c b/jerry-core/ecma/operations/ecma-container-object.c index 3d5aab9c4..3c60dcb6f 100644 --- a/jerry-core/ecma/operations/ecma-container-object.c +++ b/jerry-core/ecma/operations/ecma-container-object.c @@ -573,7 +573,7 @@ ecma_op_container_delete (ecma_value_t this_arg, /**< this argument */ ecma_deref_ecma_string (prop_name_p); - if (property_p == NULL) + if (property_p == NULL || ecma_is_value_empty (ECMA_PROPERTY_VALUE_PTR (property_p)->value)) { return ECMA_VALUE_FALSE; } diff --git a/tests/jerry/es2015/set.js b/tests/jerry/es2015/set.js index 4c898401d..42477f997 100644 --- a/tests/jerry/es2015/set.js +++ b/tests/jerry/es2015/set.js @@ -87,3 +87,7 @@ assert (set.size === 3); set.clear(); assert(set.size === 0); + +set.add(3); +assert(set.delete(3)); +assert(!set.delete(3));