New submission from Serhiy Storchaka:

Now all doctests failed on 32-bit platforms due to the unlucky coincidence of 
my patch with at least two bugs which were hided before.

SubPattern.getwidth() is wrong, it truncates resulted values to sys.maxsize 
(should be MAXREPEAT). As side effect of my patch (on 32-bit MAXREPEAT == 
sys.maxsize) it now returns correct value in some cases on 32-bit platforms. On 
other hand, the _simple() function in sre_compile.py checks if getwidth() 
returns (0, MAXREPEAT) and raise an error in such case. Perhaps it should 
guards against such patterns as '(x*)*' (but it doesn't guards against 
'(x*y?)*' or '(x*y*)*' and can raise false positive). Now getwidth() returns 
(0, MAXREPEAT) for '(x*y?)*' on 32-bit platforms (this is a correct result) and 
triggers the check. The doctest module uses regular expression pattern 
'(?:.*$\n?)*' which now causes an error.

Definitely SubPattern.getwidth() is wrong and should be fixed. At least one of 
two, the _simple() function or doctest pattern should be fixed too. The 
simplest fix is disable the 'nothing to repeat' check.

----------
assignee: serhiy.storchaka
components: Library (Lib), Regular Expressions
messages: 194297
nosy: ezio.melotti, larry, mrabarnett, pitrou, serhiy.storchaka
priority: normal
severity: normal
status: open
title: re.error: nothing to repeat
type: behavior
versions: Python 2.7, Python 3.3, Python 3.4

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue18647>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to