New submission from gnuthor <ja...@internet24.de>:

The follow code hangs on vanilla compile python 2.7 on Ubuntu 10.04 x86_64 and 
all other versions of Python that I could find (i386/x86_64, 2.6.5/2.5.2/2.2):

>>> import re
>>> regex = re.compile(r'^((?:\.\d+)+|(?:\.?\w+(?:\-*\w+)+)+)\.(\d*?)$')
>>> match = regex.match('lldpLocChassisIdSubtype')
<infinite loop or possibly exponential time>

the regex is taken from file client.py of libsnmp-python ( version 5.4.2.1 
~dfsg0ubuntu1-0ubuntu2.1 in Ubuntu 10.04 )

libsnmp-python ( 5.4.1~dfsg-12  in Debian Lenny) contains
a previous version of this regex which does not produce an infinite loop

>>> regex = re.compile(r'^((?:\.\d+)+|(?:\.?\w+(?:\-*\w+)+)+)\.?(.*)$')
>>> match = regex.match('lldpLocChassisIdSubtype')
>>> print match
<_sre.SRE_Match object at 0x7f5d2abebc68>


Perl 5.10.1 can run both of the regular expressions without problems

$ perl -e '$x="lldpLocChassisIdSubtype"; print "$1" if $x =~ 
m/^((?:\.\d+)+|(?:\.?\w+(?:\-*\w+)+)+)\.(\d*?)$/;'
$ perl -e '$x="lldpLocChassisIdSubtype"; print "$1" if $x =~ 
m/^((?:\.\d+)+|(?:\.?\w+(?:\-*\w+)+)+)\.?(.*)$/;'
lldpLocChassisIdSubtype

I realise that these two regular expression might not particularly sensible and 
are certainly not equivalent semantically, but they are syntactically correct, 
as far as I can tell, and do not contain back references etc. and thus the 
matching process should be able to always
terminate.

----------
components: Regular Expressions
messages: 111909
nosy: gnuthor
priority: normal
severity: normal
status: open
title: infinite loop with specific regexp
type: behavior
versions: Python 2.7

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

Reply via email to