diff options
author | Benjamin Peterson <benjamin@python.org> | 2018-09-19 23:04:31 -0700 |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2018-09-19 23:04:31 -0700 |
commit | d8b389bdac725fc1f040848a32e9cf6dabcf6f85 (patch) | |
tree | 9d305647a0e0be59b5e44451ff107b3a2d37bc96 /Modules | |
parent | 853afa2d4cf9792f7e4ce23fce361a1f8763be65 (diff) | |
download | cpython-git-benjamin-pickle-overflow.tar.gz |
simplify & add a commentbenjamin-pickle-overflow
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_pickle.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 4cb26b1ec0..3588e33f09 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -910,12 +910,12 @@ PyMemoTable_Set(PyMemoTable *self, PyObject *key, Py_ssize_t value) * Very large memo tables (over 50K items) use doubling instead. * This may help applications with severe memory constraints. */ - size_t triple_used = self->mt_used * 3; - if (triple_used > self->mt_used && triple_used < self->mt_allocated * 2) { + if (SIZE_MAX / 3 >= self->mt_used && self->mt_used * 3 < self->mt_allocated * 2) { return 0; } - return _PyMemoTable_ResizeTable(self, - (self->mt_used > 50000 ? 2 : 4) * self->mt_used); + // self->mt_used is always < PY_SSIZE_T_MAX, so this can't overflow. + size_t desired_size = (self->mt_used > 50000 ? 2 : 4) * self->mt_used; + return _PyMemoTable_ResizeTable(self, desired_size); } #undef MT_MINSIZE |