From dbd7931f9d60966fbb80745db368ad773a8b7569 Mon Sep 17 00:00:00 2001 From: Jean Abou-Samra Date: Thu, 3 Feb 2022 22:27:01 +0100 Subject: [PATCH] Elpi: fix catastrophic backtracking (#2061) --- pygments/lexers/elpi.py | 4 ++-- tests/snippets/elpi/test_catastrophic_backtracking.txt | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 tests/snippets/elpi/test_catastrophic_backtracking.txt diff --git a/pygments/lexers/elpi.py b/pygments/lexers/elpi.py index 691182a86..3ce6ed6a2 100644 --- a/pygments/lexers/elpi.py +++ b/pygments/lexers/elpi.py @@ -32,9 +32,9 @@ class ElpiLexer(RegexLexer): schar2_re = r"([+*^?/<>`'@#~=&!])" schar_re = r"({}|-|\$|_)".format(schar2_re) idchar_re = r"({}|{}|{}|{})".format(lcase_re,ucase_re,digit_re,schar_re) - idcharstarns_re = r"({}+|(?=\.[a-z])\.{}+)".format(idchar_re,idchar_re) + idcharstarns_re = r"({}*(\.({}|{}){}*)*)".format(idchar_re, lcase_re, ucase_re, idchar_re) symbchar_re = r"({}|{}|{}|{}|:)".format(lcase_re, ucase_re, digit_re, schar_re) - constant_re = r"({}{}*|{}{}*|{}{}*|_{}+)".format(ucase_re, idchar_re, lcase_re, idcharstarns_re,schar2_re, symbchar_re,idchar_re) + constant_re = r"({}{}*|{}{}|{}{}*|_{}+)".format(ucase_re, idchar_re, lcase_re, idcharstarns_re,schar2_re, symbchar_re,idchar_re) symbol_re=r"(,|<=>|->|:-|;|\?-|->|&|=>|\bas\b|\buvar\b|<|=<|=|==|>=|>|\bi<|\bi=<|\bi>=|\bi>|\bis\b|\br<|\br=<|\br>=|\br>|\bs<|\bs=<|\bs>=|\bs>|@|::|\[\]|`->|`:|`:=|\^|-|\+|\bi-|\bi\+|r-|r\+|/|\*|\bdiv\b|\bi\*|\bmod\b|\br\*|~|\bi~|\br~)" escape_re=r"\(({}|{})\)".format(constant_re,symbol_re) const_sym_re = r"({}|{}|{})".format(constant_re,symbol_re,escape_re) diff --git a/tests/snippets/elpi/test_catastrophic_backtracking.txt b/tests/snippets/elpi/test_catastrophic_backtracking.txt new file mode 100644 index 000000000..a14a0549c --- /dev/null +++ b/tests/snippets/elpi/test_catastrophic_backtracking.txt @@ -0,0 +1,6 @@ +---input--- +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + +---tokens--- +'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' Text +'\n' Text.Whitespace