Mercurial > babel > old > mirror
changeset 260:f353197f0fd2
skip messages that have less arguments than the keyword spec calls for
avoids potential IndexErrors during extraction
author | pjenvey |
---|---|
date | Fri, 17 Aug 2007 05:02:44 +0000 |
parents | 043201653d56 |
children | 722a49ec74d6 |
files | babel/messages/extract.py babel/messages/tests/extract.py |
diffstat | 2 files changed, 15 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/babel/messages/extract.py +++ b/babel/messages/extract.py @@ -247,11 +247,19 @@ spec = (1,) if not isinstance(messages, (list, tuple)): messages = [messages] + if not messages: + continue + # Validate the messages against the keyword's specification msgs = [] - # Validate the messages against the keyword's specification 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
--- a/babel/messages/tests/extract.py +++ b/babel/messages/tests/extract.py @@ -255,12 +255,16 @@ 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 @@ 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, [],