From: Armin Ronacher Date: Tue, 17 Jun 2008 20:40:36 +0000 (+0000) Subject: Fixed #59 by falling back silently on invalid location comments. X-Git-Tag: 1.0~322 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e82fcf5d4ee6e2c05a960cc1799fac3d7bdf5fda;p=thirdparty%2Fbabel.git Fixed #59 by falling back silently on invalid location comments. --- diff --git a/babel/messages/pofile.py b/babel/messages/pofile.py index 80664126..a84d03c0 100644 --- a/babel/messages/pofile.py +++ b/babel/messages/pofile.py @@ -208,8 +208,13 @@ def read_po(fileobj, locale=None, domain=None, ignore_obsolete=False): _add_message() if line[1:].startswith(':'): for location in line[2:].lstrip().split(): - filename, lineno = location.split(':', 1) - locations.append((filename, int(lineno))) + pos = location.rfind(':') + if pos >= 0: + try: + lineno = int(location[pos + 1:]) + except ValueError: + continue + locations.append((location[:pos], lineno)) elif line[1:].startswith(','): for flag in line[2:].lstrip().split(','): flags.append(flag.strip()) diff --git a/babel/messages/tests/pofile.py b/babel/messages/tests/pofile.py index dbc29179..93f133d1 100644 --- a/babel/messages/tests/pofile.py +++ b/babel/messages/tests/pofile.py @@ -380,6 +380,19 @@ msgstr[0] "Voh" msgstr[1] "Voeh"''' in value assert value.find('msgid ""') < value.find('msgid "bar"') < value.find('msgid "foo"') + def test_silent_location_fallback(self): + buf = StringIO('''\ +#: broken_file.py +msgid "missing line number" +msgstr "" + +#: broken_file.py:broken_line_number +msgid "broken line number" +msgstr ""''') + catalog = pofile.read_po(buf) + self.assertEqual(catalog.get('missing line number').locations, []) + self.assertEqual(catalog.get('broken line number').locations, []) + def suite(): suite = unittest.TestSuite() suite.addTest(doctest.DocTestSuite(pofile))