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

This commit is contained in:
Andrew Kuchling 2015-04-13 10:38:56 -04:00
parent 770b08e8e2
commit 8b963c5853
3 changed files with 31 additions and 1 deletions

View File

@ -262,11 +262,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 b_item in tmsg.split('\n'.encode("ascii")): for b_item in tmsg.split('\n'.encode("ascii")):
item = b_item.decode().strip() item = b_item.decode().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

@ -79,6 +79,12 @@ class GettextBaseTest(unittest.TestCase):
del self.env del self.env
support.rmtree(os.path.split(LOCALEDIR)[0]) support.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):
@ -290,6 +296,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.decodebytes(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

@ -29,6 +29,8 @@ Core and Builtins
Library Library
------- -------
- Issue #17898: Fix exception in gettext.py when parsing certain plural forms.
- Issue #22982: Improve BOM handling when seeking to multiple positions of - Issue #22982: Improve BOM handling when seeking to multiple positions of
a writable text file. a writable text file.