Mercurial > cpython-lru_cache-weakref
changeset 80201:28be586287c8 3.3
#12759: merge with 3.2.
| author | Ezio Melotti <ezio.melotti@gmail.com> |
|---|---|
| date | Sat, 03 Nov 2012 20:33:38 +0200 |
| parents | 1bdab9112e59 (current diff) 29983dd7191e (diff) |
| children | 3f4fbad75c99 5982a6ea124f |
| files | Lib/sre_parse.py Lib/test/test_re.py Misc/NEWS |
| diffstat | 3 files changed, 30 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/Lib/sre_parse.py Sat Nov 03 18:29:16 2012 +0200 +++ b/Lib/sre_parse.py Sat Nov 03 20:33:38 2012 +0200 @@ -580,6 +580,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("="): @@ -592,6 +594,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) @@ -644,6 +648,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: @@ -775,7 +781,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:
--- a/Lib/test/test_re.py Sat Nov 03 18:29:16 2012 +0200 +++ b/Lib/test/test_re.py Sat Nov 03 20:33:38 2012 +0200 @@ -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')
--- a/Misc/NEWS Sat Nov 03 18:29:16 2012 +0200 +++ b/Misc/NEWS Sat Nov 03 20:33:38 2012 +0200 @@ -61,6 +61,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.
