diff options
author | Georg Brandl <georg@python.org> | 2020-12-10 08:19:21 +0100 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2020-12-10 08:19:21 +0100 |
commit | f91804ff4772e3ab41f46e28d370f57898700333 (patch) | |
tree | 5ab474892427542767b11d3791f08f6b42575eaa | |
parent | ccd14b98092c7189452cfbe825158c434b90b9cc (diff) | |
download | pygments-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-- | CHANGES | 8 | ||||
-rw-r--r-- | pygments/lexers/ml.py | 12 |
2 files changed, 14 insertions, 6 deletions
@@ -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). |