Kaydet (Commit) 53d93adc authored tarafından Martin v. Löwis's avatar Martin v. Löwis

Patch #681152: Support escaped Unicode characters in classes. Fixes #612074.

Will backport to 2.2.
üst 910ae628
...@@ -254,7 +254,7 @@ def _class_escape(source, escape): ...@@ -254,7 +254,7 @@ def _class_escape(source, escape):
if len(escape) != 2: if len(escape) != 2:
raise error, "bogus escape: %s" % repr("\\" + escape) raise error, "bogus escape: %s" % repr("\\" + escape)
return LITERAL, atoi(escape, 16) & 0xff return LITERAL, atoi(escape, 16) & 0xff
elif str(escape[1:2]) in OCTDIGITS: elif escape[1:2] in OCTDIGITS:
# octal escape (up to three digits) # octal escape (up to three digits)
while source.next in OCTDIGITS and len(escape) < 5: while source.next in OCTDIGITS and len(escape) < 5:
escape = escape + source.get() escape = escape + source.get()
......
...@@ -96,6 +96,10 @@ test(r"""sre.match('.*?cd', 20000*'abc'+'de').end(0)""", 60001) ...@@ -96,6 +96,10 @@ test(r"""sre.match('.*?cd', 20000*'abc'+'de').end(0)""", 60001)
# non-simple '*?' still recurses and hits the recursion limit # non-simple '*?' still recurses and hits the recursion limit
test(r"""sre.search('(a|b)*?c', 10000*'ab'+'cd').end(0)""", None, RuntimeError) test(r"""sre.search('(a|b)*?c', 10000*'ab'+'cd').end(0)""", None, RuntimeError)
# bug 612074
pat=u"["+sre.escape(u"\u2039")+u"]"
test(r"""sre.compile(pat) and 1""", 1, None)
if verbose: if verbose:
print 'Running tests on sre.sub' print 'Running tests on sre.sub'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment