Commit c5f3b428 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #25725: Fixed a reference leak in pickle.loads() when unpickling

invalid data including tuple instructions.
parents 46cc4a8f a49de6be
...@@ -13,6 +13,9 @@ Core and Builtins ...@@ -13,6 +13,9 @@ Core and Builtins
Library Library
------- -------
- Issue #25725: Fixed a reference leak in pickle.loads() when unpickling
invalid data including tuple instructions.
- Issue #25663: In the Readline completer, avoid listing duplicate global - Issue #25663: In the Readline completer, avoid listing duplicate global
names, and search the global namespace before searching builtins. names, and search the global namespace before searching builtins.
......
...@@ -4984,15 +4984,14 @@ load_counted_binunicode(UnpicklerObject *self, int nbytes) ...@@ -4984,15 +4984,14 @@ load_counted_binunicode(UnpicklerObject *self, int nbytes)
} }
static int static int
load_tuple(UnpicklerObject *self) load_counted_tuple(UnpicklerObject *self, int len)
{ {
PyObject *tuple; PyObject *tuple;
Py_ssize_t i;
if ((i = marker(self)) < 0) if (Py_SIZE(self->stack) < len)
return -1; return stack_underflow();
tuple = Pdata_poptuple(self->stack, i); tuple = Pdata_poptuple(self->stack, Py_SIZE(self->stack) - len);
if (tuple == NULL) if (tuple == NULL)
return -1; return -1;
PDATA_PUSH(self->stack, tuple, -1); PDATA_PUSH(self->stack, tuple, -1);
...@@ -5000,24 +4999,14 @@ load_tuple(UnpicklerObject *self) ...@@ -5000,24 +4999,14 @@ load_tuple(UnpicklerObject *self)
} }
static int static int
load_counted_tuple(UnpicklerObject *self, int len) load_tuple(UnpicklerObject *self)
{ {
PyObject *tuple; Py_ssize_t i;
tuple = PyTuple_New(len); if ((i = marker(self)) < 0)
if (tuple == NULL)
return -1; return -1;
while (--len >= 0) { return load_counted_tuple(self, Py_SIZE(self->stack) - i);
PyObject *item;
PDATA_POP(self->stack, item);
if (item == NULL)
return -1;
PyTuple_SET_ITEM(tuple, len, item);
}
PDATA_PUSH(self->stack, tuple, -1);
return 0;
} }
static int static int
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment