From 0cf13e8e73c9bab37a5ef447ad10441171571066 Mon Sep 17 00:00:00 2001 From: Daniel Balla Date: Thu, 9 Aug 2018 11:52:52 +0200 Subject: [PATCH] Fix UTF8 string length calculation Fixes #2451 Fixes #2452 Fixes #2453 Co-authored-by: Robert Fancsik JerryScript-DCO-1.0-Signed-off-by: Daniel Balla dballa@inf.u-szeged.hu --- jerry-core/ecma/base/ecma-helpers-string.c | 2 +- tests/jerry/regression-test-issue-2451.js | 19 +++++++++++++++++++ tests/jerry/regression-test-issue-2452.js | 19 +++++++++++++++++++ tests/jerry/regression-test-issue-2453.js | 20 ++++++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 tests/jerry/regression-test-issue-2451.js create mode 100644 tests/jerry/regression-test-issue-2452.js create mode 100644 tests/jerry/regression-test-issue-2453.js diff --git a/jerry-core/ecma/base/ecma-helpers-string.c b/jerry-core/ecma/base/ecma-helpers-string.c index 0c4f2a7972..41a11120c7 100644 --- a/jerry-core/ecma/base/ecma-helpers-string.c +++ b/jerry-core/ecma/base/ecma-helpers-string.c @@ -2052,7 +2052,7 @@ ecma_string_get_utf8_length (const ecma_string_t *string_p) /**< ecma-string */ return (ecma_length_t) (long_string_p->long_utf8_string_length); } - return lit_get_utf8_length_of_cesu8_string ((const lit_utf8_byte_t *) (string_p + 1), + return lit_get_utf8_length_of_cesu8_string ((const lit_utf8_byte_t *) (long_string_p + 1), (lit_utf8_size_t) string_p->u.long_utf8_string_size); } default: diff --git a/tests/jerry/regression-test-issue-2451.js b/tests/jerry/regression-test-issue-2451.js new file mode 100644 index 0000000000..026db7a00b --- /dev/null +++ b/tests/jerry/regression-test-issue-2451.js @@ -0,0 +1,19 @@ +// Copyright JS Foundation and other contributors, http://js.foundation +// +// 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. + +var src = "var a = 0; while(a) { switch(a) {" ; +for (var i = 0; i < 4000; i++) + src += "-Infinity" + i + "\u00a0\u00a01.2e3"; +src += "\udc00%f0%90%80%80\udc00"; +print(src); diff --git a/tests/jerry/regression-test-issue-2452.js b/tests/jerry/regression-test-issue-2452.js new file mode 100644 index 0000000000..40927d5843 --- /dev/null +++ b/tests/jerry/regression-test-issue-2452.js @@ -0,0 +1,19 @@ +// Copyright JS Foundation and other contributors, http://js.foundation +// +// 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. + +var src = ""; +for (var i = 0; i < 4000; i++) + src += "\udc00%f0%90%80%80\udc00"; +src += "} }"; +print(src); diff --git a/tests/jerry/regression-test-issue-2453.js b/tests/jerry/regression-test-issue-2453.js new file mode 100644 index 0000000000..994a206a82 --- /dev/null +++ b/tests/jerry/regression-test-issue-2453.js @@ -0,0 +1,20 @@ +// Copyright JS Foundation and other contributors, http://js.foundation +// +// 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. + +var src = ""; +for (var i = 0; i < 4000; i++) + src += 4 + i + ": a += a += a; break; "; + src += "\𝔺\ +\
"; +print(src);