From: Fredrik Lundh Date: Sat, 7 Oct 2000 17:38:23 +0000 (+0000) Subject: Fixed too ambitious "nothing to repeat" check. Closes bug #114033. X-Git-Tag: v2.0c1~45 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=13ac9926ac43d3bff39a08301696105208774b6e;p=python Fixed too ambitious "nothing to repeat" check. Closes bug #114033. --- diff --git a/Lib/sre_compile.py b/Lib/sre_compile.py index 97a57e2db1..dc508e57cd 100644 --- a/Lib/sre_compile.py +++ b/Lib/sre_compile.py @@ -222,7 +222,7 @@ def _optimize_charset(charset, fixup): def _simple(av): # check if av is a "simple" operator lo, hi = av[2].getwidth() - if lo == 0: + if lo == 0 and hi == MAXREPEAT: raise error, "nothing to repeat" return lo == hi == 1 and av[2][0][0] != SUBPATTERN diff --git a/Lib/sre_constants.py b/Lib/sre_constants.py index 5a20930ce1..ea649c0482 100644 --- a/Lib/sre_constants.py +++ b/Lib/sre_constants.py @@ -9,6 +9,8 @@ # See the sre.py file for information on usage and redistribution. # +MAXREPEAT = 65535 + # should this really be here? class error(Exception): diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py index 9cbbc0254e..7c36d4f2dc 100644 --- a/Lib/sre_parse.py +++ b/Lib/sre_parse.py @@ -12,8 +12,6 @@ import string, sys from sre_constants import * -MAXREPEAT = 65535 - SPECIAL_CHARS = ".\\[{()*+?^$|" REPEAT_CHARS = "*+?{" diff --git a/Lib/test/re_tests.py b/Lib/test/re_tests.py index 7c541752f2..2d3155dacf 100755 --- a/Lib/test/re_tests.py +++ b/Lib/test/re_tests.py @@ -615,10 +615,13 @@ xyzabc # bug 112468: various expected syntax errors ('(', '', SYNTAX_ERROR), ('[\\41]', '!', SUCCEED, 'found', '!'), + # bug 114033: nothing to repeat + (r'(x?)?', 'x', SUCCEED, 'found', 'x'), # bug 115040: rescan if flags are modified inside pattern (r' (?x)foo ', 'foo', SUCCEED, 'found', 'foo'), # bug 115618: negative lookahead (r'(?