Commit 270b0586 authored by Andrew Kuchling's avatar Andrew Kuchling

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

parent 2ca7bb0b
...@@ -296,11 +296,12 @@ class GNUTranslations(NullTranslations): ...@@ -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()
......
...@@ -80,6 +80,12 @@ class GettextBaseTest(unittest.TestCase): ...@@ -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): ...@@ -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 "" ...@@ -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"
'''
...@@ -21,6 +21,8 @@ Core and Builtins ...@@ -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.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment