]> granicus.if.org Git - python/commitdiff
Invalid patterns to substitute and safe_substitute would crash since pattern
authorNeal Norwitz <nnorwitz@gmail.com>
Sun, 17 Oct 2004 16:27:18 +0000 (16:27 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Sun, 17 Oct 2004 16:27:18 +0000 (16:27 +0000)
is not a local variable.  Add a test case.

Lib/string.py
Lib/test/test_pep292.py

index 7371c915a1357fd82f7f446ad495ac1991918e75..e10087eb2a82a1a8883380d706520f180e677f7a 100644 (file)
@@ -167,7 +167,8 @@ class Template:
                 return self.delimiter
             if mo.group('invalid') is not None:
                 self._invalid(mo)
-            raise ValueError('Unrecognized named group in pattern', pattern)
+            raise ValueError('Unrecognized named group in pattern',
+                             self.pattern)
         return self.pattern.sub(convert, self.template)
 
     def safe_substitute(self, *args, **kws):
@@ -199,7 +200,8 @@ class Template:
                 return self.delimiter
             if mo.group('invalid') is not None:
                 self._invalid(mo)
-            raise ValueError('Unrecognized named group in pattern', pattern)
+            raise ValueError('Unrecognized named group in pattern',
+                             self.pattern)
         return self.pattern.sub(convert, self.template)
 
 
index f955774828d631838a4f26ab9a392d5560991486..19952e423998025e3c7ebee3d05813db149061b5 100644 (file)
@@ -113,6 +113,18 @@ class TestTemplate(unittest.TestCase):
         s = MyPattern('@bag.foo.who likes to eat a bag of @bag.what')
         self.assertEqual(s.substitute(m), 'tim likes to eat a bag of ham')
 
+        class BadPattern(Template):
+            pattern = r"""
+            (?P<badname>.*)                     |
+            (?P<escaped>@{2})                   |
+            @(?P<named>[_a-z][._a-z0-9]*)       |
+            @{(?P<braced>[_a-z][._a-z0-9]*)}    |
+            (?P<invalid>@)                      |
+            """
+        s = BadPattern('@bag.foo.who likes to eat a bag of @bag.what')
+        self.assertRaises(ValueError, s.substitute, {})
+        self.assertRaises(ValueError, s.safe_substitute, {})
+
     def test_unicode_values(self):
         s = Template('$who likes $what')
         d = dict(who=u't\xffm', what=u'f\xfe\fed')