bpo-34395: Fix memory leaks caused by incautious usage of PyMem_Resize(). (GH-8756)

(cherry picked from commit 67b9cc8e6072a919d2ed7e7ecc8124c8acfb3733)

Co-authored-by: Sergey Fedoseev <fedoseev.sergey@gmail.com>
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index 6a684f2..40b29a7 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -1380,11 +1380,13 @@
 
     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;
@@ -6297,11 +6299,10 @@
             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;