mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
[3.13] gh-130655: Add a test for big-endian MO files in gettext (GH-132469) (GH-133248)
(cherry picked from commit 474f296718
)
Co-authored-by: Tomas R <tomas.roun8@gmail.com>
This commit is contained in:
parent
679e632c5e
commit
90c786e377
1 changed files with 26 additions and 0 deletions
|
@ -117,6 +117,23 @@ GNU_MO_DATA_CORRUPT = base64.b64encode(bytes([
|
|||
0x62, 0x61, 0x72, 0x00, # Message data
|
||||
]))
|
||||
|
||||
|
||||
GNU_MO_DATA_BIG_ENDIAN = base64.b64encode(bytes([
|
||||
0x95, 0x04, 0x12, 0xDE, # Magic
|
||||
0x00, 0x00, 0x00, 0x00, # Version
|
||||
0x00, 0x00, 0x00, 0x01, # Message count
|
||||
0x00, 0x00, 0x00, 0x1C, # Message offset
|
||||
0x00, 0x00, 0x00, 0x24, # Translation offset
|
||||
0x00, 0x00, 0x00, 0x00, # Hash table size
|
||||
0x00, 0x00, 0x00, 0x2C, # Hash table offset
|
||||
0x00, 0x00, 0x00, 0x03, # 1st message length
|
||||
0x00, 0x00, 0x00, 0x2C, # 1st message offset
|
||||
0x00, 0x00, 0x00, 0x03, # 1st trans length
|
||||
0x00, 0x00, 0x00, 0x30, # 1st trans offset
|
||||
0x66, 0x6F, 0x6F, 0x00, # Message data
|
||||
0x62, 0x61, 0x72, 0x00, # Message data
|
||||
]))
|
||||
|
||||
UMO_DATA = b'''\
|
||||
3hIElQAAAAADAAAAHAAAADQAAAAAAAAAAAAAAAAAAABMAAAABAAAAE0AAAAQAAAAUgAAAA8BAABj
|
||||
AAAABAAAAHMBAAAWAAAAeAEAAABhYsOeAG15Y29udGV4dMOeBGFiw54AUHJvamVjdC1JZC1WZXJz
|
||||
|
@ -144,6 +161,7 @@ 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')
|
||||
MOFILE_CORRUPT = os.path.join(LOCALEDIR, 'gettext_corrupt.mo')
|
||||
MOFILE_BIG_ENDIAN = os.path.join(LOCALEDIR, 'gettext_big_endian.mo')
|
||||
UMOFILE = os.path.join(LOCALEDIR, 'ugettext.mo')
|
||||
MMOFILE = os.path.join(LOCALEDIR, 'metadata.mo')
|
||||
|
||||
|
@ -170,6 +188,8 @@ class GettextBaseTest(unittest.TestCase):
|
|||
fp.write(base64.decodebytes(GNU_MO_DATA_BAD_MINOR_VERSION))
|
||||
with open(MOFILE_CORRUPT, 'wb') as fp:
|
||||
fp.write(base64.decodebytes(GNU_MO_DATA_CORRUPT))
|
||||
with open(MOFILE_BIG_ENDIAN, 'wb') as fp:
|
||||
fp.write(base64.decodebytes(GNU_MO_DATA_BIG_ENDIAN))
|
||||
with open(UMOFILE, 'wb') as fp:
|
||||
fp.write(base64.decodebytes(UMO_DATA))
|
||||
with open(MMOFILE, 'wb') as fp:
|
||||
|
@ -319,6 +339,12 @@ class GettextTestCase2(GettextBaseTest):
|
|||
self.assertEqual(exception.strerror, "File is corrupt")
|
||||
self.assertEqual(exception.filename, MOFILE_CORRUPT)
|
||||
|
||||
def test_big_endian_file(self):
|
||||
with open(MOFILE_BIG_ENDIAN, 'rb') as fp:
|
||||
t = gettext.GNUTranslations(fp)
|
||||
|
||||
self.assertEqual(t.gettext('foo'), 'bar')
|
||||
|
||||
def test_some_translations(self):
|
||||
eq = self.assertEqual
|
||||
# test some translations
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue