From 001fe0f128331cfdafac57e8a5f0280e1f895f5d Mon Sep 17 00:00:00 2001 From: Tomas R Date: Fri, 4 Apr 2025 15:26:15 +0200 Subject: [PATCH] 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. --- Lib/test/test_gettext.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Lib/test/test_gettext.py b/Lib/test/test_gettext.py index 8856cf2db2099c..7a0ec35972365f 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: pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy