mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
bpo-34395: Fix memory leaks caused by incautious usage of PyMem_Resize(). (GH-8756)
This commit is contained in:
parent
864a892af3
commit
67b9cc8e60
2 changed files with 22 additions and 42 deletions
|
|
@ -1382,11 +1382,13 @@ _Unpickler_ResizeMemoList(UnpicklerObject *self, Py_ssize_t new_size)
|
|||
|
||||
assert(new_size > self->memo_size);
|
||||
|
||||
PyMem_RESIZE(self->memo, PyObject *, new_size);
|
||||
if (self->memo == NULL) {
|
||||
PyObject **memo_new = self->memo;
|
||||
PyMem_RESIZE(memo_new, PyObject *, new_size);
|
||||
if (memo_new == NULL) {
|
||||
PyErr_NoMemory();
|
||||
return -1;
|
||||
}
|
||||
self->memo = memo_new;
|
||||
for (i = self->memo_size; i < new_size; i++)
|
||||
self->memo[i] = NULL;
|
||||
self->memo_size = new_size;
|
||||
|
|
@ -6295,11 +6297,10 @@ load_mark(UnpicklerObject *self)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (self->marks == NULL)
|
||||
self->marks = PyMem_NEW(Py_ssize_t, alloc);
|
||||
else
|
||||
PyMem_RESIZE(self->marks, Py_ssize_t, alloc);
|
||||
Py_ssize_t *marks_old = self->marks;
|
||||
PyMem_RESIZE(self->marks, Py_ssize_t, alloc);
|
||||
if (self->marks == NULL) {
|
||||
PyMem_FREE(marks_old);
|
||||
self->marks_size = 0;
|
||||
PyErr_NoMemory();
|
||||
return -1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue