Kaydet (Commit) ae04c335 authored tarafından Guido van Rossum's avatar Guido van Rossum

Issue #1700, reported by Nguyen Quan Son, fix by Fredruk Lundh:

Regular Expression inline flags not handled correctly for some unicode
characters.  (Forward port from 2.5.2.)
üst 1beea3be
......@@ -525,7 +525,7 @@ def compile(p, flags=0):
indexgroup[i] = k
return _sre.compile(
pattern, flags, code,
pattern, flags | p.pattern.flags, code,
p.pattern.groups-1,
groupindex, indexgroup
)
......@@ -642,6 +642,36 @@ class ReTests(unittest.TestCase):
self.assertEqual(re.compile("bla").match(a), None)
self.assertEqual(re.compile("").match(a).groups(), ())
def test_inline_flags(self):
# Bug #1700
upper_char = unichr(0x1ea0) # Latin Capital Letter A with Dot Bellow
lower_char = unichr(0x1ea1) # Latin Small Letter A with Dot Bellow
p = re.compile(upper_char, re.I | re.U)
q = p.match(lower_char)
self.assertNotEqual(q, None)
p = re.compile(lower_char, re.I | re.U)
q = p.match(upper_char)
self.assertNotEqual(q, None)
p = re.compile('(?i)' + upper_char, re.U)
q = p.match(lower_char)
self.assertNotEqual(q, None)
p = re.compile('(?i)' + lower_char, re.U)
q = p.match(upper_char)
self.assertNotEqual(q, None)
p = re.compile('(?iu)' + upper_char)
q = p.match(lower_char)
self.assertNotEqual(q, None)
p = re.compile('(?iu)' + lower_char)
q = p.match(upper_char)
self.assertNotEqual(q, None)
def run_re_tests():
from test.re_tests import benchmarks, tests, SUCCEED, FAIL, SYNTAX_ERROR
if verbose:
......
......@@ -348,6 +348,9 @@ Core and builtins
Library
-------
- Issue #1700: Regular expression inline flags incorrectly handle certain
unicode characters.
- Issue #1689: PEP 3141, numeric abstract base classes.
- Tk issue #1851526: Return results from Python callbacks to Tcl as
......
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