Skip to content

Commit b36c498

Browse files
[3.11] gh-101765: Fix refcount issues in list and unicode pickling (GH-102265) (#102268)
(cherry picked from commit d71edbd)
1 parent 735ff5a commit b36c498

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
@@ -3459,16 +3459,24 @@ listiter_reduce_general(void *_it, int forward)
34593459
/* the objects are not the same, index is of different types! */
34603460
if (forward) {
34613461
PyObject *iter = _PyEval_GetBuiltin(&_Py_ID(iter));
3462+
if (!iter) {
3463+
return NULL;
3464+
}
34623465
listiterobject *it = (listiterobject *)_it;
34633466
if (it->it_seq) {
34643467
return Py_BuildValue("N(O)n", iter, it->it_seq, it->it_index);
34653468
}
3469+
Py_DECREF(iter);
34663470
} else {
34673471
PyObject *reversed = _PyEval_GetBuiltin(&_Py_ID(reversed));
3472+
if (!reversed) {
3473+
return NULL;
3474+
}
34683475
listreviterobject *it = (listreviterobject *)_it;
34693476
if (it->it_seq) {
34703477
return Py_BuildValue("N(O)n", reversed, it->it_seq, it->it_index);
34713478
}
3479+
Py_DECREF(reversed);
34723480
}
34733481
/* empty iterator, create an empty list */
34743482
list = PyList_New(0);

Objects/unicodeobject.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15767,8 +15767,10 @@ unicodeiter_reduce(unicodeiterobject *it, PyObject *Py_UNUSED(ignored))
1576715767
return Py_BuildValue("N(O)n", iter, it->it_seq, it->it_index);
1576815768
} else {
1576915769
PyObject *u = (PyObject *)_PyUnicode_New(0);
15770-
if (u == NULL)
15770+
if (u == NULL) {
15771+
Py_DECREF(iter);
1577115772
return NULL;
15773+
}
1577215774
return Py_BuildValue("N(N)", iter, u);
1577315775
}
1577415776
}

0 commit comments

Comments
 (0)