mirror of
https://github.com/python/cpython.git
synced 2025-09-23 08:53:45 +00:00
Issue 5794: fix cPickle's unpickling of recursive tuples.
This commit is contained in:
parent
944f684ce6
commit
57bef68bc0
3 changed files with 24 additions and 10 deletions
|
@ -4086,25 +4086,24 @@ load_binpersid(Unpicklerobject *self)
|
|||
static int
|
||||
load_pop(Unpicklerobject *self)
|
||||
{
|
||||
int len;
|
||||
|
||||
if (!( (len=self->stack->length) > 0 )) return stackUnderflow();
|
||||
int len = self->stack->length;
|
||||
|
||||
/* Note that we split the (pickle.py) stack into two stacks,
|
||||
an object stack and a mark stack. We have to be clever and
|
||||
pop the right one. We do this by looking at the top of the
|
||||
mark stack.
|
||||
mark stack first, and only signalling a stack underflow if
|
||||
the object stack is empty and the mark stack doesn't match
|
||||
our expectations.
|
||||
*/
|
||||
|
||||
if ((self->num_marks > 0) &&
|
||||
(self->marks[self->num_marks - 1] == len))
|
||||
if (self->num_marks > 0 && self->marks[self->num_marks - 1] == len) {
|
||||
self->num_marks--;
|
||||
else {
|
||||
} else if (len >= 0) {
|
||||
len--;
|
||||
Py_DECREF(self->stack->data[len]);
|
||||
self->stack->length=len;
|
||||
self->stack->length = len;
|
||||
} else {
|
||||
return stackUnderflow();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue