summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean Abou Samra <jean@abou-samra.fr>2022-08-15 01:18:40 +0200
committerJean Abou Samra <jean@abou-samra.fr>2022-08-15 01:30:38 +0200
commitd9278a5d72e04a75f63c04da85c8d4b62b10a5c8 (patch)
treee1048bb093740af8d8d16b662076615eae3f03ed
parent9bd072dbc94dc681e1ad87d249d72f0209ca3f96 (diff)
downloadpygments-git-d9278a5d72e04a75f63c04da85c8d4b62b10a5c8.tar.gz
Fortran: fix catastrophic backtracking
\\\\|\\. is like \\. but causes catastrophic backtracking inside (...)* .
-rw-r--r--CHANGES2
-rw-r--r--pygments/lexers/fortran.py4
-rw-r--r--tests/snippets/fortran/test_string_cataback.txt112
3 files changed, 116 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 382bb978..1a27ded2 100644
--- a/CHANGES
+++ b/CHANGES
@@ -24,6 +24,8 @@ Version 2.13.0
* Coq: add some common keywords, improve recognition of ``Set``
and qualified identifiers (#2158)
* F*: Allow C-style comments anywhere in a line
+ * Fortran: fix catastrophic backtracking with backslashes in strings
+ (#2194)
* Go: add support for generics (#2167)
* Inform: update for version 6.40 (#2190)
* Isabelle: recognize cartouches (#2089)
diff --git a/pygments/lexers/fortran.py b/pygments/lexers/fortran.py
index f80795d9..34d2b62e 100644
--- a/pygments/lexers/fortran.py
+++ b/pygments/lexers/fortran.py
@@ -157,8 +157,8 @@ class FortranLexer(RegexLexer):
],
'strings': [
- (r'(?s)"(\\\\|\\[0-7]+|\\.|[^"\\])*"', String.Double),
- (r"(?s)'(\\\\|\\[0-7]+|\\.|[^'\\])*'", String.Single),
+ (r'(?s)"(\\[0-7]+|\\[^0-7\n]|[^"\\])*"', String.Double),
+ (r"(?s)'(\\[0-7]+|\\[^0-7\n]|[^'\\])*'", String.Single),
],
'nums': [
diff --git a/tests/snippets/fortran/test_string_cataback.txt b/tests/snippets/fortran/test_string_cataback.txt
new file mode 100644
index 00000000..9f4b9f10
--- /dev/null
+++ b/tests/snippets/fortran/test_string_cataback.txt
@@ -0,0 +1,112 @@
+---input---
+! Bad string, there isn't an even number of backslashes.
+! This should not cause catastrophic backtracking.
+'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+
+---tokens---
+"! Bad string, there isn't an even number of backslashes.\n" Comment
+
+'! This should not cause catastrophic backtracking.\n' Comment
+
+"'" Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+'\\' Error
+"'" Error
+'\n' Text.Whitespace