#17898: reset k and v so that the loop doesn't use an old value

This commit is contained in:
Andrew Kuchling 2015-04-14 10:03:35 -04:00
parent 2ca7bb0ba2
commit 270b0586b0
3 changed files with 31 additions and 1 deletions

View File

@ -296,11 +296,12 @@ class GNUTranslations(NullTranslations):
# See if we're looking at GNU .mo conventions for metadata # See if we're looking at GNU .mo conventions for metadata
if mlen == 0: if mlen == 0:
# Catalog description # Catalog description
lastk = k = None lastk = None
for item in tmsg.splitlines(): for item in tmsg.splitlines():
item = item.strip() item = item.strip()
if not item: if not item:
continue continue
k = v = None
if ':' in item: if ':' in item:
k, v = item.split(':', 1) k, v = item.split(':', 1)
k = k.strip().lower() k = k.strip().lower()

View File

@ -80,6 +80,12 @@ class GettextBaseTest(unittest.TestCase):
del self.env del self.env
shutil.rmtree(os.path.split(LOCALEDIR)[0]) shutil.rmtree(os.path.split(LOCALEDIR)[0])
GNU_MO_DATA_ISSUE_17898 = b'''\
3hIElQAAAAABAAAAHAAAACQAAAAAAAAAAAAAAAAAAAAsAAAAggAAAC0AAAAAUGx1cmFsLUZvcm1z
OiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7CiMtIy0jLSMtIyAgbWVzc2FnZXMucG8gKEVk
WCBTdHVkaW8pICAjLSMtIy0jLSMKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVU
Ri04CgA=
'''
class GettextTestCase1(GettextBaseTest): class GettextTestCase1(GettextBaseTest):
def setUp(self): def setUp(self):
@ -291,6 +297,14 @@ class PluralFormsTestCase(GettextBaseTest):
# Test for a dangerous expression # Test for a dangerous expression
raises(ValueError, gettext.c2py, "os.chmod('/etc/passwd',0777)") raises(ValueError, gettext.c2py, "os.chmod('/etc/passwd',0777)")
class GNUTranslationParsingTest(GettextBaseTest):
def test_plural_form_error_issue17898(self):
with open(MOFILE, 'wb') as fp:
fp.write(base64.decodestring(GNU_MO_DATA_ISSUE_17898))
with open(MOFILE, 'rb') as fp:
# If this runs cleanly, the bug is fixed.
t = gettext.GNUTranslations(fp)
class UnicodeTranslationsTest(GettextBaseTest): class UnicodeTranslationsTest(GettextBaseTest):
def setUp(self): def setUp(self):
@ -465,3 +479,16 @@ msgstr ""
"Content-Transfer-Encoding: quoted-printable\n" "Content-Transfer-Encoding: quoted-printable\n"
"Generated-By: pygettext.py 1.3\n" "Generated-By: pygettext.py 1.3\n"
''' '''
#
# messages.po, used for bug 17898
#
'''
# test file for http://bugs.python.org/issue17898
msgid ""
msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"#-#-#-#-# messages.po (EdX Studio) #-#-#-#-#\n"
"Content-Type: text/plain; charset=UTF-8\n"
'''

View File

@ -21,6 +21,8 @@ Core and Builtins
Library Library
------- -------
- Issue #17898: Fix exception in gettext.py when parsing certain plural forms.
- Issue #23865: close() methods in multiple modules now are idempotent and more - Issue #23865: close() methods in multiple modules now are idempotent and more
robust at shutdown. If needs to release multiple resources, they are released robust at shutdown. If needs to release multiple resources, they are released
even if errors are occured. even if errors are occured.