From 13ac9926ac43d3bff39a08301696105208774b6e Mon Sep 17 00:00:00 2001 From: Fredrik Lundh Date: Sat, 7 Oct 2000 17:38:23 +0000 Subject: Fixed too ambitious "nothing to repeat" check. Closes bug #114033. --- Lib/sre_compile.py | 2 +- Lib/sre_constants.py | 2 ++ Lib/sre_parse.py | 2 -- Lib/test/re_tests.py | 3 +++ 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Lib/sre_compile.py b/Lib/sre_compile.py index 97a57e2..dc508e5 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 5a20930..ea649c0 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 9cbbc02..7c36d4f 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 7c54175..2d3155d 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'(?