[Python-checkins] cpython (3.2): #12759: sre_parse now raises a proper error when the name of the group is

ezio.melotti python-checkins at python.org
Sat Nov 3 19:34:34 CET 2012


http://hg.python.org/cpython/rev/29983dd7191e
changeset: 80200:29983dd7191e
branch: 3.2
parent: 80196:1046110a819d
user: Ezio Melotti <ezio.melotti at gmail.com>
date: Sat Nov 03 20:33:08 2012 +0200
summary:
 #12759: sre_parse now raises a proper error when the name of the group is missing. Initial patch by Serhiy Storchaka.
files:
 Lib/sre_parse.py | 8 +++++++-
 Lib/test/test_re.py | 20 ++++++++++++++++++++
 Misc/NEWS | 3 +++
 3 files changed, 30 insertions(+), 1 deletions(-)
diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py
--- a/Lib/sre_parse.py
+++ b/Lib/sre_parse.py
@@ -548,6 +548,8 @@
 break
 name = name + char
 group = 1
+ if not name:
+ raise error("missing group name")
 if not isname(name):
 raise error("bad character in group name")
 elif sourcematch("="):
@@ -560,6 +562,8 @@
 if char == ")":
 break
 name = name + char
+ if not name:
+ raise error("missing group name")
 if not isname(name):
 raise error("bad character in group name")
 gid = state.groupdict.get(name)
@@ -612,6 +616,8 @@
 break
 condname = condname + char
 group = 2
+ if not condname:
+ raise error("missing group name")
 if isname(condname):
 condgroup = state.groupdict.get(condname)
 if condgroup is None:
@@ -743,7 +749,7 @@
 break
 name = name + char
 if not name:
- raise error("bad group name")
+ raise error("missing group name")
 try:
 index = int(name)
 if index < 0:
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -161,11 +161,31 @@
 self.assertEqual(re.sub('x*', '-', 'abxd'), '-a-b-d-')
 self.assertEqual(re.sub('x+', '-', 'abxd'), 'ab-d')
 
+ def test_symbolic_groups(self):
+ re.compile('(?P<a>x)(?P=a)(?(a)y)')
+ re.compile('(?P<a1>x)(?P=a1)(?(a1)y)')
+ self.assertRaises(re.error, re.compile, '(?P<a>)(?P<a>)')
+ self.assertRaises(re.error, re.compile, '(?Px)')
+ self.assertRaises(re.error, re.compile, '(?P=)')
+ self.assertRaises(re.error, re.compile, '(?P=1)')
+ self.assertRaises(re.error, re.compile, '(?P=a)')
+ self.assertRaises(re.error, re.compile, '(?P=a1)')
+ self.assertRaises(re.error, re.compile, '(?P=a.)')
+ self.assertRaises(re.error, re.compile, '(?P<)')
+ self.assertRaises(re.error, re.compile, '(?P<>)')
+ self.assertRaises(re.error, re.compile, '(?P<1>)')
+ self.assertRaises(re.error, re.compile, '(?P<a.>)')
+ self.assertRaises(re.error, re.compile, '(?())')
+ self.assertRaises(re.error, re.compile, '(?(a))')
+ self.assertRaises(re.error, re.compile, '(?(1a))')
+ self.assertRaises(re.error, re.compile, '(?(a.))')
+
 def test_symbolic_refs(self):
 self.assertRaises(re.error, re.sub, '(?P<a>x)', '\g<a', 'xx')
 self.assertRaises(re.error, re.sub, '(?P<a>x)', '\g<', 'xx')
 self.assertRaises(re.error, re.sub, '(?P<a>x)', '\g', 'xx')
 self.assertRaises(re.error, re.sub, '(?P<a>x)', '\g<a a>', 'xx')
+ self.assertRaises(re.error, re.sub, '(?P<a>x)', '\g<>', 'xx')
 self.assertRaises(re.error, re.sub, '(?P<a>x)', '\g<1a1>', 'xx')
 self.assertRaises(IndexError, re.sub, '(?P<a>x)', '\g<ab>', 'xx')
 self.assertRaises(re.error, re.sub, '(?P<a>x)|(?P<b>y)', '\g<b>', 'xx')
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -143,6 +143,9 @@
 Library
 -------
 
+- Issue #12759: sre_parse now raises a proper error when the name of the group
+ is missing. Initial patch by Serhiy Storchaka.
+
 - Issue #16152: fix tokenize to ignore whitespace at the end of the code when
 no newline is found. Patch by Ned Batchelder.
 
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /