[Patches] [ python-Patches-527371 ] Fix for sre bug 470582
noreply@sourceforge.net
noreply@sourceforge.net
Fri, 08 Mar 2002 05:20:51 -0800
Patches item #527371, was opened at 2002-03-08 04:14
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=305470&aid=527371&group_id=5470
Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Greg Chapman (glchapman)
Assigned to: Nobody/Anonymous (nobody)
Summary: Fix for sre bug 470582
Initial Comment:
Bug report 470582 points out that nested groups can
produces matches in sre even if the groups within
which they are nested do not match:
>>> m = sre.search(r"^((\d)\:)?(\d\d)\.(\d\d\d)
$", "34.123")
>>> m.groups()
(None, '3', '34', '123')
>>> m = pre.search(r"^((\d)\:)?(\d\d)\.(\d\d\d)
$", "34.123")
>>> m.groups()
(None, None, '34', '123')
I believe this is because in the handling of
SRE_OP_MAX_UNTIL, state->lastmark is being reduced
(after "((\d)\:)" fails) without NULLing out the now-
invalid entries at the end of the state->mark array.
In the other two cases where state->lastmark is
reduced (specifically in SRE_OP_BRANCH and
SRE_OP_REPEAT_ONE) memset is used to NULL out the
entries at the end of the array. The attached patch
does the same thing for the SRE_OP_MAX_UNTIL case.
This fixes the above case and does not break anything
in test_re.py.
----------------------------------------------------------------------
>Comment By: Greg Chapman (glchapman)
Date: 2002-03-08 04:20
Message:
Logged In: YES
user_id=86307
I forgot: here's a patch for re_tests.py which adds the
case from the bug report as a test.
----------------------------------------------------------------------
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=305470&aid=527371&group_id=5470