Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6627a96

Browse files
committed
Invalid patterns to substitute and safe_substitute would crash since pattern
is not a local variable. Add a test case.
1 parent 1338946 commit 6627a96

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

Lib/string.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ def convert(mo):
167167
return self.delimiter
168168
if mo.group('invalid') is not None:
169169
self._invalid(mo)
170-
raise ValueError('Unrecognized named group in pattern', pattern)
170+
raise ValueError('Unrecognized named group in pattern',
171+
self.pattern)
171172
return self.pattern.sub(convert, self.template)
172173

173174
def safe_substitute(self, *args, **kws):
@@ -199,7 +200,8 @@ def convert(mo):
199200
return self.delimiter
200201
if mo.group('invalid') is not None:
201202
self._invalid(mo)
202-
raise ValueError('Unrecognized named group in pattern', pattern)
203+
raise ValueError('Unrecognized named group in pattern',
204+
self.pattern)
203205
return self.pattern.sub(convert, self.template)
204206

205207

Lib/test/test_pep292.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,18 @@ class MyPattern(Template):
113113
s = MyPattern('@bag.foo.who likes to eat a bag of @bag.what')
114114
self.assertEqual(s.substitute(m), 'tim likes to eat a bag of ham')
115115

116+
class BadPattern(Template):
117+
pattern = r"""
118+
(?P<badname>.*) |
119+
(?P<escaped>@{2}) |
120+
@(?P<named>[_a-z][._a-z0-9]*) |
121+
@{(?P<braced>[_a-z][._a-z0-9]*)} |
122+
(?P<invalid>@) |
123+
"""
124+
s = BadPattern('@bag.foo.who likes to eat a bag of @bag.what')
125+
self.assertRaises(ValueError, s.substitute, {})
126+
self.assertRaises(ValueError, s.safe_substitute, {})
127+
116128
def test_unicode_values(self):
117129
s = Template('$who likes $what')
118130
d = dict(who=u't\xffm', what=u'f\xfe\fed')

0 commit comments

Comments
 (0)