summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2018-09-19 23:04:31 -0700
committerBenjamin Peterson <benjamin@python.org>2018-09-19 23:04:31 -0700
commitd8b389bdac725fc1f040848a32e9cf6dabcf6f85 (patch)
tree9d305647a0e0be59b5e44451ff107b3a2d37bc96
parent853afa2d4cf9792f7e4ce23fce361a1f8763be65 (diff)
downloadcpython-git-benjamin-pickle-overflow.tar.gz
simplify & add a commentbenjamin-pickle-overflow
-rw-r--r--Modules/_pickle.c8
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