From 6e8f7b6e5969ae1684e78eccf02aac8b194b6c2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Lang=C3=B3?= Date: Thu, 9 Jul 2015 11:41:17 +0200 Subject: [PATCH] Assertion fix in RegExp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Assertion 'mem_pools == NULL' failed in mem_pools_finalize JerryScript-DCO-1.0-Signed-off-by: László Langó llango.u-szeged@partner.samsung.com --- .../ecma/operations/ecma-regexp-object.cpp | 20 +++++++------- tests/jerry/regression-test-issue-255.js | 26 +++++++++++++++++++ 2 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 tests/jerry/regression-test-issue-255.js diff --git a/jerry-core/ecma/operations/ecma-regexp-object.cpp b/jerry-core/ecma/operations/ecma-regexp-object.cpp index 73928eb3c..2e3417638 100644 --- a/jerry-core/ecma/operations/ecma-regexp-object.cpp +++ b/jerry-core/ecma/operations/ecma-regexp-object.cpp @@ -644,7 +644,7 @@ re_match_regexp (re_matcher_ctx_t *re_ctx_p, /**< RegExp matcher context */ re_ctx_p->saved_p[RE_GLOBAL_END_IDX] = str_p; *res_p = str_p; re_ctx_p->recursion_depth--; - return ret_value = ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE); /* match */ + return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE); /* match */ } case RE_OP_ALTERNATIVE: { @@ -1003,12 +1003,13 @@ re_match_regexp (re_matcher_ctx_t *re_ctx_p, /**< RegExp matcher context */ ecma_completion_value_t match_value = re_match_regexp (re_ctx_p, bc_p, str_p, &sub_str_p); if (!ecma_is_value_true (match_value)) { + if (ecma_is_completion_value_throw (match_value)) + { + return match_value; + } + break; } - else if (ecma_is_completion_value_throw (match_value)) - { - return match_value; - } str_p = sub_str_p; num_of_iter++; } @@ -1033,12 +1034,13 @@ re_match_regexp (re_matcher_ctx_t *re_ctx_p, /**< RegExp matcher context */ ecma_completion_value_t match_value = re_match_regexp (re_ctx_p, bc_p, str_p, &sub_str_p); if (!ecma_is_value_true (match_value)) { + if (ecma_is_completion_value_throw (match_value)) + { + return match_value; + } + break; } - else if (ecma_is_completion_value_throw (match_value)) - { - return match_value; - } str_p = sub_str_p; num_of_iter++; } diff --git a/tests/jerry/regression-test-issue-255.js b/tests/jerry/regression-test-issue-255.js new file mode 100644 index 000000000..f2ef4d3f2 --- /dev/null +++ b/tests/jerry/regression-test-issue-255.js @@ -0,0 +1,26 @@ +// Copyright 2015 Samsung Electronics Co., Ltd. +// Copyright 2015 University of Szeged. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +v_0 = /(?!(?!l{666,}))/; + +try +{ + v_0.exec("llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll"); +} +catch (e) +{ + assert (e instanceof RangeError); + assert (e.message === "RegExp executor steps limit is exceeded."); +}