diff -r ebec1a98ab81 Modules/_pickle.c --- a/Modules/_pickle.c Mon Nov 23 16:44:30 2015 +0200 +++ b/Modules/_pickle.c Tue Nov 24 22:47:05 2015 +0200 @@ -5067,18 +5067,12 @@ load_counted_tuple(UnpicklerObject *self { PyObject *tuple; - tuple = PyTuple_New(len); + if (Py_SIZE(self->stack) < len) + return stack_underflow(); + + tuple = Pdata_poptuple(self->stack, Py_SIZE(self->stack) - len); if (tuple == NULL) return -1; - - while (--len >= 0) { - PyObject *item; - - PDATA_POP(self->stack, item); - if (item == NULL) - return -1; - PyTuple_SET_ITEM(tuple, len, item); - } PDATA_PUSH(self->stack, tuple, -1); return 0; }