From: Philip Jenvey Date: Fri, 17 Aug 2007 05:02:44 +0000 (+0000) Subject: skip messages that have less arguments than the keyword spec calls for X-Git-Tag: 1.0~391 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=434e5fffb1e43226c10adb41edcc8f01087b68ff;p=thirdparty%2Fbabel.git skip messages that have less arguments than the keyword spec calls for avoids potential IndexErrors during extraction --- diff --git a/babel/messages/extract.py b/babel/messages/extract.py index d6909f44..e882dc28 100644 --- a/babel/messages/extract.py +++ b/babel/messages/extract.py @@ -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 diff --git a/babel/messages/tests/extract.py b/babel/messages/tests/extract.py index a142a29b..94b9eee3 100644 --- a/babel/messages/tests/extract.py +++ b/babel/messages/tests/extract.py @@ -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, [],