summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--lexer.c2
-rw-r--r--tests/03_bugs/06_lexer_escape_at_boundary12
2 files changed, 13 insertions, 1 deletions
diff --git a/lexer.c b/lexer.c
index dfb7d98..0935494 100644
--- a/lexer.c
+++ b/lexer.c
@@ -614,7 +614,7 @@ parse_string(uc_lexer *lex, bool no_regexp)
else if (*ptr == '\\') {
lex->is_escape = true;
lookbehind_append(lex, lex->bufstart, ptr - lex->bufstart);
- buf_consume(lex, ptr - lex->bufstart);
+ buf_consume(lex, (ptr - lex->bufstart) + 1);
}
}
diff --git a/tests/03_bugs/06_lexer_escape_at_boundary b/tests/03_bugs/06_lexer_escape_at_boundary
new file mode 100644
index 0000000..e80b0a1
--- /dev/null
+++ b/tests/03_bugs/06_lexer_escape_at_boundary
@@ -0,0 +1,12 @@
+When the lexer processed a backslash introducing a string escape directly
+at the buffer boundary, the backslash was incorrectly retained.
+
+-- Testcase --
+{%
+ print("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl\n");
+%}
+-- End --
+
+-- Expect stdout --
+abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl
+-- End --