libexpr: Recognize newline in more places in lexer #1939
Merged
+11
−4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Flex's regexes have an annoying feature: the dot matches everything
except a newline. This causes problems for expressions like:
where the backslash-newline combination matches this rule instead of the
intended one mentioned in the comment:
However, the parser actually accepts the resulting token sequence
(
'"' DOLLAR_CURLY 0 '}' STR '"'
), which is a problem because the lexerrule didn't assign anything to yylval. Ultimately this leads to a crash
when dereferencing a NULL pointer in ExprConcatStrings::bindVars().
The fix does change the syntax of the language in some corner cases
but I think it's only turning previously invalid (or crashing) syntax
to valid syntax. E.g.
and
were previously syntax errors but now both result in "a\nb".
Found by afl-fuzz.