https://github.com/python/cpython/commit/2c05ebd1634259fafba8400e79c51419698a18d0 commit: 2c05ebd1634259fafba8400e79c51419698a18d0 branch: 3.13 author: Miss Islington (bot) <31488909+miss-isling...@users.noreply.github.com> committer: picnixz <10796600+picn...@users.noreply.github.com> date: 2025-04-04T16:49:31+02:00 summary:
[3.13] gh-130655: Add a test for bad magic numbers in `.mo` files parsed by `gettext` (GH-131909) (#132077) gh-130655: Add a test for bad magic numbers in `.mo` files parsed by `gettext` (GH-131909) (cherry picked from commit 16a6270aa61c86c430a308c0f766a69a88c9a3a5) Co-authored-by: Tomas R <tomas.ro...@gmail.com> files: M Lib/test/test_gettext.py diff --git a/Lib/test/test_gettext.py b/Lib/test/test_gettext.py index 3d38ccf6cbba50..0c374ba95dc593 100644 --- a/Lib/test/test_gettext.py +++ b/Lib/test/test_gettext.py @@ -39,6 +39,9 @@ bmsgd2luayAoaW4gIm15IG90aGVyIGNvbnRleHQiKQB3aW5rIHdpbmsA ''' +# .mo file with an invalid magic number +GNU_MO_DATA_BAD_MAGIC_NUMBER = base64.b64encode(b'ABCD') + # This data contains an invalid major version number (5) # An unexpected major version number should be treated as an error when # parsing a .mo file @@ -111,6 +114,7 @@ LOCALEDIR = os.path.join('xx', 'LC_MESSAGES') MOFILE = os.path.join(LOCALEDIR, 'gettext.mo') +MOFILE_BAD_MAGIC_NUMBER = os.path.join(LOCALEDIR, 'gettext_bad_magic_number.mo') MOFILE_BAD_MAJOR_VERSION = os.path.join(LOCALEDIR, 'gettext_bad_major_version.mo') MOFILE_BAD_MINOR_VERSION = os.path.join(LOCALEDIR, 'gettext_bad_minor_version.mo') UMOFILE = os.path.join(LOCALEDIR, 'ugettext.mo') @@ -131,6 +135,8 @@ def setUpClass(cls): os.makedirs(LOCALEDIR) with open(MOFILE, 'wb') as fp: fp.write(base64.decodebytes(GNU_MO_DATA)) + with open(MOFILE_BAD_MAGIC_NUMBER, 'wb') as fp: + fp.write(base64.decodebytes(GNU_MO_DATA_BAD_MAGIC_NUMBER)) with open(MOFILE_BAD_MAJOR_VERSION, 'wb') as fp: fp.write(base64.decodebytes(GNU_MO_DATA_BAD_MAJOR_VERSION)) with open(MOFILE_BAD_MINOR_VERSION, 'wb') as fp: @@ -249,6 +255,16 @@ def test_bindtextdomain(self): def test_textdomain(self): self.assertEqual(gettext.textdomain(), 'gettext') + def test_bad_magic_number(self): + with open(MOFILE_BAD_MAGIC_NUMBER, 'rb') as fp: + with self.assertRaises(OSError) as cm: + gettext.GNUTranslations(fp) + + exception = cm.exception + self.assertEqual(exception.errno, 0) + self.assertEqual(exception.strerror, "Bad magic number") + self.assertEqual(exception.filename, MOFILE_BAD_MAGIC_NUMBER) + def test_bad_major_version(self): with open(MOFILE_BAD_MAJOR_VERSION, 'rb') as fp: with self.assertRaises(OSError) as cm: _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com