mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +00:00
gh-102701: Fix overflow in dictobject.c (GH-102750)
(cherry picked from commit 65fb7c4055
)
Co-authored-by: Inada Naoki <songofacandy@gmail.com>
This commit is contained in:
parent
d025b1d278
commit
f967aee4fb
3 changed files with 11 additions and 1 deletions
|
@ -1248,6 +1248,15 @@ class ListTest(unittest.TestCase):
|
|||
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 len(sys.argv) > 1:
|
||||
support.set_memlimit(sys.argv[1])
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix overflow when creating very large dict.
|
|
@ -600,7 +600,7 @@ new_keys_object(uint8_t log2_size, bool unicode)
|
|||
|
||||
assert(log2_size >= PyDict_LOG_MINSIZE);
|
||||
|
||||
usable = USABLE_FRACTION(1<<log2_size);
|
||||
usable = USABLE_FRACTION((size_t)1<<log2_size);
|
||||
if (log2_size < 8) {
|
||||
log2_bytes = log2_size;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue