]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-92536: Update unicode struct size to ensure MemoryError is raised (GH-92867)
authorDennis Sweeney <36520290+sweeneyde@users.noreply.github.com>
Tue, 17 May 2022 14:12:21 +0000 (10:12 -0400)
committerGitHub <noreply@github.com>
Tue, 17 May 2022 14:12:21 +0000 (10:12 -0400)
Lib/test/test_unicode.py

index c98fabf8bc9b5a733470395aea1153b5a0ef3168..64abc0c761b3c8c85e339bbae21f741b084e4031 100644 (file)
@@ -2370,14 +2370,9 @@ class UnicodeTest(string_tests.CommonTest,
         self.assertIs(s.expandtabs(), s)
 
     def test_raiseMemError(self):
-        if struct.calcsize('P') == 8:
-            # 64 bits pointers
-            ascii_struct_size = 48
-            compact_struct_size = 72
-        else:
-            # 32 bits pointers
-            ascii_struct_size = 24
-            compact_struct_size = 36
+        null_byte = 1
+        ascii_struct_size = sys.getsizeof("a") - len("a") - null_byte
+        compact_struct_size = sys.getsizeof("\xff") - len("\xff") - null_byte
 
         for char in ('a', '\xe9', '\u20ac', '\U0010ffff'):
             code = ord(char)
@@ -2395,8 +2390,9 @@ class UnicodeTest(string_tests.CommonTest,
             # be allocatable, given enough memory.
             maxlen = ((sys.maxsize - struct_size) // char_size)
             alloc = lambda: char * maxlen
-            self.assertRaises(MemoryError, alloc)
-            self.assertRaises(MemoryError, alloc)
+            with self.subTest(char=char):
+                self.assertRaises(MemoryError, alloc)
+                self.assertRaises(MemoryError, alloc)
 
     def test_format_subclass(self):
         class S(str):