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