summaryrefslogtreecommitdiff
path: root/mammoth
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-09-12 09:12:13 +0100
committerMichael Williamson <mike@zwobble.org>2026-09-12 09:17:30 +0100
commitd05095fdc8608cb47844a2594e0480c04304fb89 (patch)
tree3b77a86d4355a5baf830e6b73f873d9013980db9 /mammoth
parent5f87fadfd8b7787b92b41f84ebf850dbe3a6cf28 (diff)
Avoid excessive backtracking when parsing unterminated strings
Diffstat (limited to 'mammoth')
-rw-r--r--mammoth/styles/parser/tokeniser.py8
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([