From b32e5444d86b880125eceafacee4f4d871e685ed Mon Sep 17 00:00:00 2001 From: Yanhui Shen Date: Tue, 15 Aug 2017 10:29:23 +0800 Subject: [PATCH] Allow "" character within string literals in strict mode JerryScript-DCO-1.0-Signed-off-by: Yanhui Shen shen.elf@gmail.com --- jerry-core/parser/js/js-lexer.c | 10 +++++++ tests/jerry/strict.js | 46 +++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/jerry-core/parser/js/js-lexer.c b/jerry-core/parser/js/js-lexer.c index 699dd8c42..1bb5cc924 100644 --- a/jerry-core/parser/js/js-lexer.c +++ b/jerry-core/parser/js/js-lexer.c @@ -615,6 +615,16 @@ lexer_parse_string (parser_context_t *context_p) /**< context */ continue; } + if (*source_p == LIT_CHAR_0 + && source_p + 1 < source_end_p + && (*(source_p + 1) < LIT_CHAR_0 || *(source_p + 1) > LIT_CHAR_9)) + { + source_p++; + column++; + length++; + continue; + } + /* Except \x, \u, and octal numbers, everything is * converted to a character which has the same byte length. */ if (*source_p >= LIT_CHAR_0 && *source_p <= LIT_CHAR_3) diff --git a/tests/jerry/strict.js b/tests/jerry/strict.js index 8bd33c37d..ad3c9199d 100644 --- a/tests/jerry/strict.js +++ b/tests/jerry/strict.js @@ -70,6 +70,52 @@ try assert (e instanceof TypeError); } +try +{ + eval ("'\\" + "101'"); + + assert (false); +} catch (e) +{ + assert (e instanceof SyntaxError); +} + +try +{ + var str1 = "'\\" + "0'"; + var str2 = "'\\x" + "00'"; + eval (str1); + + assert (eval (str1) === eval (str2)); +} catch (e) +{ + assert (false); +} + +try +{ + var str1 = "'\\" + "0" + "\\" + "0" + "\\" + "0'"; + var str2 = "'\\x" + "00" + "\\x" + "00" + "\\x" + "00'"; + eval (str1); + + assert (eval (str1) === eval (str2)); +} catch (e) +{ + assert (false); +} + +try +{ + var str1 = "'foo\\" + "0" + "bar'"; + var str2 = "'foo\\x" + "00" + "bar'"; + eval (str1); + + assert (eval (str1) === eval (str2)); +} catch (e) +{ + assert (false); +} + (function (a) { (function (a) { });