mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
Add a test case for exception pickling. args is never NULL.
This commit is contained in:
parent
ddba473e26
commit
05f97bffac
2 changed files with 21 additions and 11 deletions
|
@ -270,6 +270,8 @@ try:
|
||||||
'winerror' : 1 }))
|
'winerror' : 1 }))
|
||||||
except NameError: pass
|
except NameError: pass
|
||||||
|
|
||||||
|
import pickle, random
|
||||||
|
|
||||||
for args in exceptionList:
|
for args in exceptionList:
|
||||||
expected = args[-1]
|
expected = args[-1]
|
||||||
try:
|
try:
|
||||||
|
@ -283,3 +285,14 @@ for args in exceptionList:
|
||||||
( repr(e), checkArgName,
|
( repr(e), checkArgName,
|
||||||
repr(expected[checkArgName]),
|
repr(expected[checkArgName]),
|
||||||
repr(getattr(e, checkArgName)) ))
|
repr(getattr(e, checkArgName)) ))
|
||||||
|
|
||||||
|
# test for pickling support
|
||||||
|
new = pickle.loads(pickle.dumps(e, random.randint(0, 2)))
|
||||||
|
for checkArgName in expected.keys():
|
||||||
|
if repr(getattr(e, checkArgName)) != repr(expected[checkArgName]):
|
||||||
|
raise TestFailed('Checking unpickled exception arguments, '
|
||||||
|
'exception '
|
||||||
|
'"%s", attribute "%s" expected %s got %s.' %
|
||||||
|
( repr(e), checkArgName,
|
||||||
|
repr(expected[checkArgName]),
|
||||||
|
repr(getattr(e, checkArgName)) ))
|
||||||
|
|
|
@ -143,15 +143,8 @@ BaseException_reduce(PyBaseExceptionObject *self)
|
||||||
{
|
{
|
||||||
if (self->args && self->dict)
|
if (self->args && self->dict)
|
||||||
return PyTuple_Pack(3, self->ob_type, self->args, self->dict);
|
return PyTuple_Pack(3, self->ob_type, self->args, self->dict);
|
||||||
else if (self->args)
|
else
|
||||||
return PyTuple_Pack(2, self->ob_type, self->args);
|
return PyTuple_Pack(2, self->ob_type, self->args);
|
||||||
else {
|
|
||||||
PyObject *res, *tup = PyTuple_New(0);
|
|
||||||
if (!tup) return NULL;
|
|
||||||
res = PyTuple_Pack(2, self->ob_type, tup);
|
|
||||||
Py_DECREF(tup);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -667,6 +660,7 @@ EnvironmentError_reduce(PyEnvironmentErrorObject *self)
|
||||||
{
|
{
|
||||||
PyObject *args = self->args;
|
PyObject *args = self->args;
|
||||||
PyObject *res = NULL, *tmp;
|
PyObject *res = NULL, *tmp;
|
||||||
|
|
||||||
/* self->args is only the first two real arguments if there was a
|
/* self->args is only the first two real arguments if there was a
|
||||||
* file name given to EnvironmentError. */
|
* file name given to EnvironmentError. */
|
||||||
if (PyTuple_GET_SIZE(args) == 2 && self->filename) {
|
if (PyTuple_GET_SIZE(args) == 2 && self->filename) {
|
||||||
|
@ -683,10 +677,13 @@ EnvironmentError_reduce(PyEnvironmentErrorObject *self)
|
||||||
|
|
||||||
Py_INCREF(self->filename);
|
Py_INCREF(self->filename);
|
||||||
PyTuple_SET_ITEM(args, 2, self->filename);
|
PyTuple_SET_ITEM(args, 2, self->filename);
|
||||||
} else {
|
} else
|
||||||
Py_INCREF(args);
|
Py_INCREF(args);
|
||||||
}
|
|
||||||
res = PyTuple_Pack(3, self->ob_type, args, self->dict);
|
if (self->dict)
|
||||||
|
res = PyTuple_Pack(3, self->ob_type, args, self->dict);
|
||||||
|
else
|
||||||
|
res = PyTuple_Pack(2, self->ob_type, args);
|
||||||
Py_DECREF(args);
|
Py_DECREF(args);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue