diff options
-rw-r--r-- | lexer.c | 9 | ||||
-rw-r--r-- | tests/custom/04_bugs/40_lexer_bug_on_lstrip_off | 20 |
2 files changed, 26 insertions, 3 deletions
@@ -887,9 +887,12 @@ lex_step(uc_lexer_t *lex, FILE *fp) buf_consume(lex, 1); } - /* global block lstrip */ - else if (lex->config && lex->config->lstrip_blocks) { - rv = lookbehind_to_text(lex, lex->source->off, TK_TEXT, " \t\v\f\r"); + /* put out text leading up to the opening tag and potentially + * strip trailing white space from it depending on the global + * block lstrip setting */ + else { + rv = lookbehind_to_text(lex, lex->source->off, TK_TEXT, + (lex->config && lex->config->lstrip_blocks) ? " \t\v\f\r" : NULL); } } else { diff --git a/tests/custom/04_bugs/40_lexer_bug_on_lstrip_off b/tests/custom/04_bugs/40_lexer_bug_on_lstrip_off new file mode 100644 index 0000000..dc4f8dd --- /dev/null +++ b/tests/custom/04_bugs/40_lexer_bug_on_lstrip_off @@ -0,0 +1,20 @@ +When a template was parsed with global block left stripping disabled, +then any text preceding an expression or statement block start tag was +incorrectly prepended to the first token value of the block, leading +to syntax errors in the compiler. + +-- Testcase -- +{% for (let x in [1, 2, 3]): %} +{{ x }} +{% endfor %} +-- End -- + +-- Args -- +-Tno-lstrip +-- End -- + +-- Expect stdout -- +1 +2 +3 +-- End -- |