]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
Fixed #59 by falling back silently on invalid location comments.
authorArmin Ronacher <armin.ronacher@active-4.com>
Tue, 17 Jun 2008 20:40:36 +0000 (20:40 +0000)
committerArmin Ronacher <armin.ronacher@active-4.com>
Tue, 17 Jun 2008 20:40:36 +0000 (20:40 +0000)
babel/messages/pofile.py
babel/messages/tests/pofile.py

index 806641265b7f6e9882e677a3396eff03543ae40f..a84d03c0f51a003c691e09b02e3b19e014875d6f 100644 (file)
@@ -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())
index dbc2917993818e2e141770083da52e3530a0f19c..93f133d19ee393602e6a7e0569079357394922eb 100644 (file)
@@ -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))