Fix more memory allocation issues found with failmalloc.
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index 6b9b322..56f2335 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -196,7 +196,7 @@
for (i = self->length, p = self->data + clearto;
--i >= clearto;
p++) {
- Py_DECREF(*p);
+ Py_CLEAR(*p);
}
self->length = clearto;
@@ -208,6 +208,7 @@
{
int bigger;
size_t nbytes;
+ PyObject **tmp;
bigger = self->size << 1;
if (bigger <= 0) /* was 0, or new value overflows */
@@ -217,14 +218,14 @@
nbytes = (size_t)bigger * sizeof(PyObject *);
if (nbytes / sizeof(PyObject *) != (size_t)bigger)
goto nomemory;
- self->data = realloc(self->data, nbytes);
- if (self->data == NULL)
+ tmp = realloc(self->data, nbytes);
+ if (tmp == NULL)
goto nomemory;
+ self->data = tmp;
self->size = bigger;
return 0;
nomemory:
- self->size = 0;
PyErr_NoMemory();
return -1;
}
@@ -4163,6 +4164,7 @@
int list_len;
slice=Pdata_popList(self->stack, x);
+ if (! slice) return -1;
list_len = PyList_GET_SIZE(list);
i=PyList_SetSlice(list, list_len, list_len, slice);
Py_DECREF(slice);
@@ -5167,6 +5169,9 @@
if (!( self->memo = PyDict_New()))
goto err;
+ if (!self->stack)
+ goto err;
+
Py_INCREF(f);
self->file = f;