--- Python27\lib\gettext.py 2009-12-06 19:04:04.000000000 +0000 +++ release27-maint\lib\gettext.py 2010-07-15 22:17:35.459530000 +0100 @@ -294,11 +294,12 @@ # See if we're looking at GNU .mo conventions for metadata if mlen == 0: # Catalog description - lastk = k = None + lastk = None for item in tmsg.splitlines(): item = item.strip() if not item: continue + k = None if ':' in item: k, v = item.split(':', 1) k = k.strip().lower() --- Python27\lib\test\test_gettext.py 2009-12-06 19:03:58.000000000 +0000 +++ release27-maint\lib\test\test_gettext.py 2010-07-15 20:56:34.247230000 +0100 @@ -54,10 +54,27 @@ bGUKR2VuZXJhdGVkLUJ5OiBweWdldHRleHQucHkgMS4zCgA= ''' +# Bug 1448060 +''' +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"#-#-#-#-# plo.po (PACKAGE VERSION) #-#-#-#-#\n" +''' + +DATA_1448060 = '''\ +3hIElQAAAAABAAAAHAAAACQAAAADAAAALAAAAAAAAAA4AAAAgAAAADkAAAABAAAAAAAAAAAAAAAA +Q29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04ClBsdXJhbC1Gb3JtczogbnBs +dXJhbHM9MjsgcGx1cmFsPShuICE9IDEpOwojLSMtIy0jLSMgcGxvLnBvIChQQUNLQUdFIFZFUlNJ +T04pICMtIy0jLSMtIwoA +''' + LOCALEDIR = os.path.join('xx', 'LC_MESSAGES') MOFILE = os.path.join(LOCALEDIR, 'gettext.mo') UMOFILE = os.path.join(LOCALEDIR, 'ugettext.mo') MMOFILE = os.path.join(LOCALEDIR, 'metadata.mo') +FILE_1448060 = os.path.join(LOCALEDIR, 'data1448080.mo') class GettextBaseTest(unittest.TestCase): @@ -74,6 +91,9 @@ fp.write(base64.decodestring(MMO_DATA)) fp.close() self.env = test_support.EnvironmentVarGuard() + fp = open(FILE_1448060, 'wb') + fp.write(base64.decodestring(DATA_1448060)) + fp.close() self.env['LANGUAGE'] = 'xx' def tearDown(self): @@ -333,6 +353,22 @@ self.assertEqual(info['last-translator'], 'John Doe \nJane Foobar ') +class Bug1448060(GettextBaseTest): + def setUp(self): + GettextBaseTest.setUp(self) + fp = open(FILE_1448060, 'rb') + try: + try: + self.t = gettext.GNUTranslations(fp) + except: + self.tearDown() + raise + finally: + fp.close() + + def test_weird_metadata(self): + fp = open(FILE_1448060, 'rb') + self.t = gettext.GNUTranslations(fp) def test_main(): test_support.run_unittest(__name__)