summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_pickle.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index ea5bbe2..f7b5212 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -3837,13 +3837,17 @@ load_build(UnpicklerObject *self)
if (setstate == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
PyErr_Clear();
- else
+ else {
+ Py_DECREF(state);
return -1;
+ }
}
else {
PyObject *result;
/* The explicit __setstate__ is responsible for everything. */
+ /* Ugh... this does not leak since unpickler_call() steals the
+ reference to state first. */
result = unpickler_call(self, setstate, state);
Py_DECREF(setstate);
if (result == NULL)