]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
skip messages that have less arguments than the keyword spec calls for
authorPhilip Jenvey <pjenvey@underboss.org>
Fri, 17 Aug 2007 05:02:44 +0000 (05:02 +0000)
committerPhilip Jenvey <pjenvey@underboss.org>
Fri, 17 Aug 2007 05:02:44 +0000 (05:02 +0000)
avoids potential IndexErrors during extraction

babel/messages/extract.py
babel/messages/tests/extract.py

index d6909f44836db033f3d5a5ef961ecbdc6326ac0e..e882dc2885a455085b2edbdd0eb2a0fb6b515981 100644 (file)
@@ -247,11 +247,19 @@ def extract(method, fileobj, keywords=DEFAULT_KEYWORDS, comment_tags=(),
             spec = (1,)
         if not isinstance(messages, (list, tuple)):
             messages = [messages]
+        if not messages:
+            continue
 
-        msgs = []
         # Validate the messages against the keyword's specification
+        msgs = []
         invalid = False
+        # last_index is 1 based like the keyword spec
+        last_index = len(messages)
         for index in spec:
+            if last_index < index:
+                # Not enough arguments
+                invalid = True
+                break
             message = messages[index - 1]
             if message is None:
                 invalid = True
index a142a29b048cbf8b9674874751b9ac9dd28ad6a1..94b9eee31ba49207dfd1d404852cf772441c1e48 100644 (file)
@@ -255,12 +255,16 @@ foo = _('foo', 'bar')
 n = ngettext('hello', 'there', n=3)
 n = ngettext(n=3, 'hello', 'there')
 n = ngettext(n=3, *messages)
+n = ngettext()
+n = ngettext('foo')
 """)
         messages = list(extract.extract_python(buf, ('_', 'ngettext'), [], {}))
         self.assertEqual((u'foo', u'bar'), messages[0][2])
         self.assertEqual((u'hello', u'there', None), messages[1][2])
         self.assertEqual((None, u'hello', u'there'), messages[2][2])
         self.assertEqual((None, None), messages[3][2])
+        self.assertEqual(None, messages[4][2])
+        self.assertEqual(('foo'), messages[5][2])
 
     def test_utf8_message(self):
         buf = StringIO("""
@@ -327,6 +331,8 @@ foo = _('foo', 'bar')
 n = ngettext('hello', 'there', n=3)
 n = ngettext(n=3, 'hello', 'there')
 n = ngettext(n=3, *messages)
+n = ngettext()
+n = ngettext('foo')
 """)
         messages = \
             list(extract.extract('python', buf, extract.DEFAULT_KEYWORDS, [],