mirror of
https://github.com/python/cpython.git
synced 2026-01-06 23:42:34 +00:00
Merged revisions 88147 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r88147 | antoine.pitrou | 2011-01-23 18:12:25 +0100 (dim., 23 janv. 2011) | 3 lines Issue #10987: Fix the recursion limit handling in the _pickle module. ........
This commit is contained in:
parent
eb9d5ad6ba
commit
0f2a61a11e
3 changed files with 20 additions and 7 deletions
|
|
@ -1566,7 +1566,12 @@ save_list(PicklerObject *self, PyObject *obj)
|
|||
iter = PyObject_GetIter(obj);
|
||||
if (iter == NULL)
|
||||
goto error;
|
||||
if (Py_EnterRecursiveCall(" while pickling an object")) {
|
||||
Py_DECREF(iter);
|
||||
goto error;
|
||||
}
|
||||
status = batch_list(self, iter);
|
||||
Py_LeaveRecursiveCall();
|
||||
Py_DECREF(iter);
|
||||
}
|
||||
|
||||
|
|
@ -1814,10 +1819,10 @@ save_dict(PicklerObject *self, PyObject *obj)
|
|||
if (PyDict_CheckExact(obj) && self->proto > 0) {
|
||||
/* We can take certain shortcuts if we know this is a dict and
|
||||
not a dict subclass. */
|
||||
if (Py_EnterRecursiveCall(" while pickling an object") == 0) {
|
||||
status = batch_dict_exact(self, obj);
|
||||
Py_LeaveRecursiveCall();
|
||||
}
|
||||
if (Py_EnterRecursiveCall(" while pickling an object"))
|
||||
goto error;
|
||||
status = batch_dict_exact(self, obj);
|
||||
Py_LeaveRecursiveCall();
|
||||
} else {
|
||||
items = PyObject_CallMethod(obj, "items", "()");
|
||||
if (items == NULL)
|
||||
|
|
@ -1826,7 +1831,12 @@ save_dict(PicklerObject *self, PyObject *obj)
|
|||
Py_DECREF(items);
|
||||
if (iter == NULL)
|
||||
goto error;
|
||||
if (Py_EnterRecursiveCall(" while pickling an object")) {
|
||||
Py_DECREF(iter);
|
||||
goto error;
|
||||
}
|
||||
status = batch_dict(self, iter);
|
||||
Py_LeaveRecursiveCall();
|
||||
Py_DECREF(iter);
|
||||
}
|
||||
}
|
||||
|
|
@ -2353,7 +2363,7 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
|
|||
PyObject *memo_key = NULL;
|
||||
int status = 0;
|
||||
|
||||
if (Py_EnterRecursiveCall(" while pickling an object") < 0)
|
||||
if (Py_EnterRecursiveCall(" while pickling an object"))
|
||||
return -1;
|
||||
|
||||
/* The extra pers_save argument is necessary to avoid calling save_pers()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue