Fixed too ambitious "nothing to repeat" check. Closes bug #114033.

This commit is contained in:
Fredrik Lundh 2000-10-07 17:38:23 +00:00
parent 5c0b43d1e2
commit 13ac9926ac
4 changed files with 6 additions and 3 deletions

View File

@ -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

View File

@ -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):

View File

@ -12,8 +12,6 @@ import string, sys
from sre_constants import *
MAXREPEAT = 65535
SPECIAL_CHARS = ".\\[{()*+?^$|"
REPEAT_CHARS = "*+?{"

View File

@ -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'(?<!abc)(d.f)', 'abcdefdof', SUCCEED, 'found', 'dof'),
# bug 116251: character class bug
(r'[\w-]+', 'laser_beam', SUCCEED, 'found', 'laser_beam'),
]