From e98f5342f9d1dcb800bbd2ee6916153c5c148283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1niel=20B=C3=A1tyai?= Date: Fri, 28 Aug 2020 13:09:53 +0200 Subject: [PATCH] Fix leaking lastIndex values in RegExp built-ins (#4166) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JerryScript-DCO-1.0-Signed-off-by: Dániel Bátyai daniel.batyai@h-lab.eu --- jerry-core/ecma/base/ecma-helpers-value.c | 1 - .../ecma/operations/ecma-regexp-object.c | 43 ++++++++++++------- tests/jerry/es.next/symbol-replace.js | 31 ++++++++++++- 3 files changed, 58 insertions(+), 17 deletions(-) diff --git a/jerry-core/ecma/base/ecma-helpers-value.c b/jerry-core/ecma/base/ecma-helpers-value.c index deb826404..39d15e179 100644 --- a/jerry-core/ecma/base/ecma-helpers-value.c +++ b/jerry-core/ecma/base/ecma-helpers-value.c @@ -567,7 +567,6 @@ ecma_make_length_value (ecma_length_t number) /**< number to be encoded */ return ecma_make_integer_value ((ecma_integer_value_t) number); } - JERRY_ASSERT (number <= ECMA_NUMBER_MAX_SAFE_INTEGER); return ecma_create_float_number ((ecma_number_t) number); } /* ecma_make_length_value */ diff --git a/jerry-core/ecma/operations/ecma-regexp-object.c b/jerry-core/ecma/operations/ecma-regexp-object.c index ec0ccce26..17198b778 100644 --- a/jerry-core/ecma/operations/ecma-regexp-object.c +++ b/jerry-core/ecma/operations/ecma-regexp-object.c @@ -2263,11 +2263,14 @@ ecma_regexp_split_helper (ecma_value_t this_arg, /**< this value */ while (current_index < string_length) { /* 24.a-b. */ + ecma_value_t index_value = ecma_make_length_value (current_index); result = ecma_op_object_put (splitter_obj_p, lastindex_str_p, - ecma_make_length_value (current_index), + index_value, true); + ecma_free_value (index_value); + if (ECMA_IS_VALUE_ERROR (result)) { goto cleanup_array; @@ -2771,11 +2774,14 @@ ecma_regexp_replace_helper_fast (ecma_replace_context_t *ctx_p, /**