#17341: Include name in re error message about invalid group name.

Patch by Jason Michalski.
This commit is contained in:
R David Murray 2013-04-14 13:00:54 -04:00
parent f2fa5fc794
commit 26dfaac9ac
4 changed files with 18 additions and 2 deletions

View File

@ -600,7 +600,7 @@ def _parse(source, state):
if not name: if not name:
raise error("missing group name") raise error("missing group name")
if not name.isidentifier(): if not name.isidentifier():
raise error("bad character in group name") raise error("bad character in group name %r" % name)
elif sourcematch("="): elif sourcematch("="):
# named backreference # named backreference
name = "" name = ""
@ -614,7 +614,8 @@ def _parse(source, state):
if not name: if not name:
raise error("missing group name") raise error("missing group name")
if not name.isidentifier(): if not name.isidentifier():
raise error("bad character in group name") raise error("bad character in backref group name "
"%r" % name)
gid = state.groupdict.get(name) gid = state.groupdict.get(name)
if gid is None: if gid is None:
raise error("unknown group name") raise error("unknown group name")

View File

@ -3,6 +3,7 @@ from test.support import verbose, run_unittest, gc_collect, bigmemtest, _2G, \
import io import io
import re import re
from re import Scanner from re import Scanner
import sre_constants
import sys import sys
import string import string
import traceback import traceback
@ -1029,6 +1030,16 @@ class ReTests(unittest.TestCase):
self.assertRaises(OverflowError, re.compile, r".{,%d}" % MAXREPEAT) self.assertRaises(OverflowError, re.compile, r".{,%d}" % MAXREPEAT)
self.assertRaises(OverflowError, re.compile, r".{%d,}?" % MAXREPEAT) self.assertRaises(OverflowError, re.compile, r".{%d,}?" % MAXREPEAT)
def test_backref_group_name_in_exception(self):
# Issue 17341: Poor error message when compiling invalid regex
with self.assertRaisesRegex(sre_constants.error, '<foo>'):
re.compile('(?P=<foo>)')
def test_group_name_in_exception(self):
# Issue 17341: Poor error message when compiling invalid regex
with self.assertRaisesRegex(sre_constants.error, '\?foo'):
re.compile('(?P<?foo>)')
def run_re_tests(): def run_re_tests():
from test.re_tests import tests, SUCCEED, FAIL, SYNTAX_ERROR from test.re_tests import tests, SUCCEED, FAIL, SYNTAX_ERROR

View File

@ -805,6 +805,7 @@ Piotr Meyer
Alexis Métaireau Alexis Métaireau
Steven Miale Steven Miale
Trent Mick Trent Mick
Jason Michalski
Franck Michea Franck Michea
Tom Middleton Tom Middleton
Stan Mihai Stan Mihai

View File

@ -29,6 +29,9 @@ Core and Builtins
Library Library
------- -------
- Issue #17341: Include the invalid name in the error messages from re about
invalid group names.
- Issue #17702: os.environ now raises KeyError with the original environment - Issue #17702: os.environ now raises KeyError with the original environment
variable name (str on UNIX), instead of using the encoded name (bytes on variable name (str on UNIX), instead of using the encoded name (bytes on
UNIX). UNIX).