summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2020-12-10 08:19:21 +0100
committerGeorg Brandl <georg@python.org>2020-12-10 08:19:21 +0100
commitf91804ff4772e3ab41f46e28d370f57898700333 (patch)
tree5ab474892427542767b11d3791f08f6b42575eaa
parentccd14b98092c7189452cfbe825158c434b90b9cc (diff)
downloadpygments-git-f91804ff4772e3ab41f46e28d370f57898700333.tar.gz
fixes #1625: infinite loop in SML lexer
Reason was a lookahead-only pattern which was included in the state where the lookahead was transitioning to.
-rw-r--r--CHANGES8
-rw-r--r--pygments/lexers/ml.py12
2 files changed, 14 insertions, 6 deletions
diff --git a/CHANGES b/CHANGES
index 5e0c8683..fbfeeb1c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -11,6 +11,14 @@ Version 2.8.0
-------------
(not released yet)
+
+Version 2.7.4
+-------------
+(not released yet)
+
+- Fixed infinite loop in SML lexer (#1625)
+
+
Version 2.7.3
-------------
(released December 6, 2020)
diff --git a/pygments/lexers/ml.py b/pygments/lexers/ml.py
index 8ca8ce3e..f2ac367c 100644
--- a/pygments/lexers/ml.py
+++ b/pygments/lexers/ml.py
@@ -142,7 +142,7 @@ class SMLLexer(RegexLexer):
(r'#\s+(%s)' % symbolicid_re, Name.Label),
# Some reserved words trigger a special, local lexer state change
(r'\b(datatype|abstype)\b(?!\')', Keyword.Reserved, 'dname'),
- (r'(?=\b(exception)\b(?!\'))', Text, ('ename')),
+ (r'\b(exception)\b(?!\')', Keyword.Reserved, 'ename'),
(r'\b(functor|include|open|signature|structure)\b(?!\')',
Keyword.Reserved, 'sname'),
(r'\b(type|eqtype)\b(?!\')', Keyword.Reserved, 'tname'),
@@ -315,15 +315,14 @@ class SMLLexer(RegexLexer):
'ename': [
include('whitespace'),
- (r'(exception|and)\b(\s+)(%s)' % alphanumid_re,
+ (r'(and\b)(\s+)(%s)' % alphanumid_re,
bygroups(Keyword.Reserved, Text, Name.Class)),
- (r'(exception|and)\b(\s*)(%s)' % symbolicid_re,
+ (r'(and\b)(\s*)(%s)' % symbolicid_re,
bygroups(Keyword.Reserved, Text, Name.Class)),
(r'\b(of)\b(?!\')', Keyword.Reserved),
+ (r'(%s)|(%s)' % (alphanumid_re, symbolicid_re), Name.Class),
- include('breakout'),
- include('core'),
- (r'\S+', Error),
+ default('#pop'),
],
'datcon': [
@@ -445,6 +444,7 @@ class OcamlLexer(RegexLexer):
],
}
+
class OpaLexer(RegexLexer):
"""
Lexer for the Opa language (http://opalang.org).