diff -r c2f3b7c56dff Lib/sre_parse.py
--- a/Lib/sre_parse.py Sat Oct 15 15:41:05 2016 +0900
+++ b/Lib/sre_parse.py Sun Oct 16 11:04:39 2016 +0200
@@ -884,6 +884,8 @@
literal = []
lappend = literal.append
def addgroup(index):
+ if index > pattern.groups:
+ raise error("invalid group reference %r" % index)
if literal:
literals.append(''.join(literal))
del literal[:]
diff -r c2f3b7c56dff Lib/test/test_re.py
--- a/Lib/test/test_re.py Sat Oct 15 15:41:05 2016 +0900
+++ b/Lib/test/test_re.py Sun Oct 16 11:04:39 2016 +0200
@@ -186,18 +186,18 @@
r'octal escape value \777 outside of '
r'range 0-0o377', 0)
- self.checkTemplateError('x', r'\1', 'x', 'invalid group reference')
- self.checkTemplateError('x', r'\8', 'x', 'invalid group reference')
- self.checkTemplateError('x', r'\9', 'x', 'invalid group reference')
- self.checkTemplateError('x', r'\11', 'x', 'invalid group reference')
- self.checkTemplateError('x', r'\18', 'x', 'invalid group reference')
- self.checkTemplateError('x', r'\1a', 'x', 'invalid group reference')
- self.checkTemplateError('x', r'\90', 'x', 'invalid group reference')
- self.checkTemplateError('x', r'\99', 'x', 'invalid group reference')
- self.checkTemplateError('x', r'\118', 'x', 'invalid group reference') # r'\11' + '8'
- self.checkTemplateError('x', r'\11a', 'x', 'invalid group reference')
- self.checkTemplateError('x', r'\181', 'x', 'invalid group reference') # r'\18' + '1'
- self.checkTemplateError('x', r'\800', 'x', 'invalid group reference') # r'\80' + '0'
+ self.checkTemplateError('x', r'\1', 'x', 'invalid group reference 1')
+ self.checkTemplateError('x', r'\8', 'x', 'invalid group reference 8')
+ self.checkTemplateError('x', r'\9', 'x', 'invalid group reference 9')
+ self.checkTemplateError('x', r'\11', 'x', 'invalid group reference 11')
+ self.checkTemplateError('x', r'\18', 'x', 'invalid group reference 18')
+ self.checkTemplateError('x', r'\1a', 'x', 'invalid group reference 1')
+ self.checkTemplateError('x', r'\90', 'x', 'invalid group reference 90')
+ self.checkTemplateError('x', r'\99', 'x', 'invalid group reference 99')
+ self.checkTemplateError('x', r'\118', 'x', 'invalid group reference 11') # r'\11' + '8'
+ self.checkTemplateError('x', r'\11a', 'x', 'invalid group reference 11')
+ self.checkTemplateError('x', r'\181', 'x', 'invalid group reference 18') # r'\18' + '1'
+ self.checkTemplateError('x', r'\800', 'x', 'invalid group reference 80') # r'\80' + '0'
# in python2.3 (etc), these loop endlessly in sre_parser.py
self.assertEqual(re.sub('(((((((((((x)))))))))))', r'\11', 'x'), 'x')
@@ -271,9 +271,9 @@
self.checkTemplateError('(?Px)', r'\g<1a1>', 'xx',
"bad character in group name '1a1'", 3)
self.checkTemplateError('(?Px)', r'\g<2>', 'xx',
- 'invalid group reference')
+ 'invalid group reference 2')
self.checkTemplateError('(?Px)', r'\2', 'xx',
- 'invalid group reference')
+ 'invalid group reference 2')
with self.assertRaisesRegex(IndexError, "unknown group name 'ab'"):
re.sub('(?Px)', r'\g', 'xx')
self.assertEqual(re.sub('(?Px)|(?Py)', r'\g', 'xx'), '')