From 57db5ca918c33a9330d91a3fe5d69a74d9a19a64 Mon Sep 17 00:00:00 2001 From: Akos Kiss Date: Sun, 20 Mar 2016 00:00:17 +0100 Subject: [PATCH] Fix regexp character classes with \uNNNN and \xNN code points Currently, if a regexp contains a character class and that character class contains a hex-specified code point -- either \uNNNN or \xNN --, then the character 'u' or 'x' is added to the character class as well. This patch fixes the error and also adds a regression test covering the issue. Fixes #962 JerryScript-DCO-1.0-Signed-off-by: Akos Kiss akiss@inf.u-szeged.hu --- jerry-core/parser/regexp/re-parser.c | 2 ++ tests/jerry/regression-test-issue-962.js | 27 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 tests/jerry/regression-test-issue-962.js diff --git a/jerry-core/parser/regexp/re-parser.c b/jerry-core/parser/regexp/re-parser.c index 533ae0ac15..4016dbd30e 100644 --- a/jerry-core/parser/regexp/re-parser.c +++ b/jerry-core/parser/regexp/re-parser.c @@ -421,6 +421,7 @@ re_parse_char_class (re_parser_ctx_t *parser_ctx_p, /**< number of classes */ parser_ctx_p->input_curr_p += 2; append_char_class (re_ctx_p, code_unit, code_unit); + ch = LIT_CHAR_UNDEF; } else if (ch == LIT_CHAR_LOWERCASE_U) { @@ -433,6 +434,7 @@ re_parse_char_class (re_parser_ctx_t *parser_ctx_p, /**< number of classes */ parser_ctx_p->input_curr_p += 4; append_char_class (re_ctx_p, code_unit, code_unit); + ch = LIT_CHAR_UNDEF; } else if (ch == LIT_CHAR_LOWERCASE_D) { diff --git a/tests/jerry/regression-test-issue-962.js b/tests/jerry/regression-test-issue-962.js new file mode 100644 index 0000000000..292dd18e26 --- /dev/null +++ b/tests/jerry/regression-test-issue-962.js @@ -0,0 +1,27 @@ +// Copyright 2016 Samsung Electronics Co., Ltd. +// Copyright 2016 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. + +function re_test (pattern, string, expected) +{ + assert ((new RegExp(pattern)).exec(string) == expected); +} + +re_test("[\\u0020]", "u", null); +re_test("[\\u0020]", " ", " "); +re_test("[\\u0020]", "x", null); + +re_test("[\\x20]", "u", null); +re_test("[\\x20]", " ", " "); +re_test("[\\x20]", "x", null);