diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-09-12 09:12:13 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-09-12 09:17:30 +0100 |
| commit | d05095fdc8608cb47844a2594e0480c04304fb89 (patch) | |
| tree | 3b77a86d4355a5baf830e6b73f873d9013980db9 /mammoth | |
| parent | 5f87fadfd8b7787b92b41f84ebf850dbe3a6cf28 (diff) | |
Avoid excessive backtracking when parsing unterminated strings
Diffstat (limited to 'mammoth')
| -rw-r--r-- | mammoth/styles/parser/tokeniser.py | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/mammoth/styles/parser/tokeniser.py b/mammoth/styles/parser/tokeniser.py index 7366cfe..96c537e 100644 --- a/mammoth/styles/parser/tokeniser.py +++ b/mammoth/styles/parser/tokeniser.py @@ -13,13 +13,13 @@ class TokenType(object): UNTERMINATED_STRING = "unterminated string" INTEGER = "integer" END = "end" - + def regex_tokeniser(rules): rules = [(token_type, _to_regex(regex)) for token_type, regex in rules] rules.append(("unknown", re.compile("."))) - + def tokenise(value): tokens = [] index = 0 @@ -39,7 +39,7 @@ def regex_tokeniser(rules): return tokens return tokenise - + def _to_regex(value): if hasattr(value, "match"): @@ -48,7 +48,7 @@ def _to_regex(value): return re.compile(value) -_string_prefix = r"'(?:\\.|[^'])*" +_string_prefix = r"'(?:\\(?:.|$)|[^'\\])*" _identifier_character = r"(?:[a-zA-Z\-_]|\\.)" tokenise = regex_tokeniser([ |
