Skip to content

Commit d71edbd

Browse files
gh-101765: Fix refcount issues in list and unicode pickling (#102265)
Followup from #101769.
1 parent a498de4 commit d71edbd

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

Objects/listobject.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3451,16 +3451,24 @@ listiter_reduce_general(void *_it, int forward)
34513451
/* the objects are not the same, index is of different types! */
34523452
if (forward) {
34533453
PyObject *iter = _PyEval_GetBuiltin(&_Py_ID(iter));
3454+
if (!iter) {
3455+
return NULL;
3456+
}
34543457
_PyListIterObject *it = (_PyListIterObject *)_it;
34553458
if (it->it_seq) {
34563459
return Py_BuildValue("N(O)n", iter, it->it_seq, it->it_index);
34573460
}
3461+
Py_DECREF(iter);
34583462
} else {
34593463
PyObject *reversed = _PyEval_GetBuiltin(&_Py_ID(reversed));
3464+
if (!reversed) {
3465+
return NULL;
3466+
}
34603467
listreviterobject *it = (listreviterobject *)_it;
34613468
if (it->it_seq) {
34623469
return Py_BuildValue("N(O)n", reversed, it->it_seq, it->it_index);
34633470
}
3471+
Py_DECREF(reversed);
34643472
}
34653473
/* empty iterator, create an empty list */
34663474
list = PyList_New(0);

Objects/unicodeobject.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14794,8 +14794,10 @@ unicodeiter_reduce(unicodeiterobject *it, PyObject *Py_UNUSED(ignored))
1479414794
return Py_BuildValue("N(O)n", iter, it->it_seq, it->it_index);
1479514795
} else {
1479614796
PyObject *u = unicode_new_empty();
14797-
if (u == NULL)
14797+
if (u == NULL) {
14798+
Py_DECREF(iter);
1479814799
return NULL;
14800+
}
1479914801
return Py_BuildValue("N(N)", iter, u);
1480014802
}
1480114803
}

0 commit comments

Comments
 (0)