gh-102701: Fix overflow in dictobject.c (GH-102750)

This commit is contained in:
Inada Naoki 2023-03-17 22:39:09 +09:00 committed by GitHub
parent 4f5774f648
commit 65fb7c4055
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 1 deletions

View File

@ -1248,6 +1248,15 @@ class ListTest(unittest.TestCase):
self.assertEqual(l[-10:], [5] * 10) self.assertEqual(l[-10:], [5] * 10)
class DictTest(unittest.TestCase):
@bigmemtest(size=357913941, memuse=160)
def test_dict(self, size):
# https://github.com/python/cpython/issues/102701
d = dict.fromkeys(range(size))
d[size] = 1
if __name__ == '__main__': if __name__ == '__main__':
if len(sys.argv) > 1: if len(sys.argv) > 1:
support.set_memlimit(sys.argv[1]) support.set_memlimit(sys.argv[1])

View File

@ -0,0 +1 @@
Fix overflow when creating very large dict.

View File

@ -596,7 +596,7 @@ new_keys_object(PyInterpreterState *interp, uint8_t log2_size, bool unicode)
assert(log2_size >= PyDict_LOG_MINSIZE); assert(log2_size >= PyDict_LOG_MINSIZE);
usable = USABLE_FRACTION(1<<log2_size); usable = USABLE_FRACTION((size_t)1<<log2_size);
if (log2_size < 8) { if (log2_size < 8) {
log2_bytes = log2_size; log2_bytes = log2_size;
} }