mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
[3.11] gh-100061: Proper fix of the bug in the matching of possessive quantifiers (GH-102612) (GH-108004)
Restore the global Input Stream pointer after trying to match a sub-pattern.
Co-authored-by: Ma Lin <animalize@users.noreply.github.com>
(cherry picked from commit abd9cc52d9)
Co-authored-by: SKO <41810398+uyw4687@users.noreply.github.com>
This commit is contained in:
parent
4f35d4f6f2
commit
26137e2cf7
4 changed files with 16 additions and 9 deletions
|
|
@ -2397,6 +2397,16 @@ def test_template_function_and_flag_is_deprecated(self):
|
|||
self.assertFalse(template_re1.match('nope'))
|
||||
|
||||
def test_bug_gh106052(self):
|
||||
# gh-100061
|
||||
self.assertEqual(re.match('(?>(?:.(?!D))+)', 'ABCDE').span(), (0, 2))
|
||||
self.assertEqual(re.match('(?:.(?!D))++', 'ABCDE').span(), (0, 2))
|
||||
self.assertEqual(re.match('(?>(?:.(?!D))*)', 'ABCDE').span(), (0, 2))
|
||||
self.assertEqual(re.match('(?:.(?!D))*+', 'ABCDE').span(), (0, 2))
|
||||
self.assertEqual(re.match('(?>(?:.(?!D))?)', 'CDE').span(), (0, 0))
|
||||
self.assertEqual(re.match('(?:.(?!D))?+', 'CDE').span(), (0, 0))
|
||||
self.assertEqual(re.match('(?>(?:.(?!D)){1,3})', 'ABCDE').span(), (0, 2))
|
||||
self.assertEqual(re.match('(?:.(?!D)){1,3}+', 'ABCDE').span(), (0, 2))
|
||||
# gh-106052
|
||||
self.assertEqual(re.match("(?>(?:ab?c)+)", "aca").span(), (0, 2))
|
||||
self.assertEqual(re.match("(?:ab?c)++", "aca").span(), (0, 2))
|
||||
self.assertEqual(re.match("(?>(?:ab?c)*)", "aca").span(), (0, 2))
|
||||
|
|
@ -2502,7 +2512,6 @@ def test_atomic_group(self):
|
|||
17: SUCCESS
|
||||
''')
|
||||
|
||||
@unittest.expectedFailure # gh-106052
|
||||
def test_possesive_repeat_one(self):
|
||||
self.assertEqual(get_debug_out(r'a?+'), '''\
|
||||
POSSESSIVE_REPEAT 0 1
|
||||
|
|
@ -2515,7 +2524,6 @@ def test_possesive_repeat_one(self):
|
|||
12: SUCCESS
|
||||
''')
|
||||
|
||||
@unittest.expectedFailure # gh-106052
|
||||
def test_possesive_repeat(self):
|
||||
self.assertEqual(get_debug_out(r'(?:ab)?+'), '''\
|
||||
POSSESSIVE_REPEAT 0 1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue