From dc49225425c2c07de0a6dc3529f2386c82a032b4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 12 Sep 2026 09:29:13 +0100 Subject: Avoid excessive backtracking when parsing unterminated strings --- test/styles/parser/tokeniser.tests.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'test') diff --git a/test/styles/parser/tokeniser.tests.js b/test/styles/parser/tokeniser.tests.js index 16f3847..04c25e0 100644 --- a/test/styles/parser/tokeniser.tests.js +++ b/test/styles/parser/tokeniser.tests.js @@ -31,10 +31,30 @@ test("strings are tokenised", function() { assertTokens("'Tristan'", [isToken("string", "Tristan")]); }); +test("escaped string terminators in strings are tokenised", function() { + assertTokens("'Tristan\\''", [isToken("string", "Tristan\\'")]); +}); + +test("escape sequences in strings are tokenised", function() { + assertTokens("'Tristan\\\\'", [isToken("string", "Tristan\\\\")]); +}); + test("unterminated strings are tokenised", function() { assertTokens("'Tristan", [isToken("unterminated-string", "Tristan")]); }); +test("unterminated strings ending with escaped string terminator are tokenised", function() { + assertTokens("'Tristan\\'", [isToken("unterminated-string", "Tristan\\'")]); +}); + +test("unterminated strings with unterminated escape are tokenised", function() { + assertTokens("'Tristan\\", [isToken("unterminated-string", "Tristan\\")]); +}); + +test("unterminated strings with many escape sequences do not cause excessive backtracking", function() { + assertTokens("'" + "\\a".repeat(50), [isToken("unterminated-string", "\\a".repeat(50))]); +}); + test("arrows are tokenised", function() { assertTokens("=>", [isToken("arrow")]); }); -- cgit v1.2.3