Commit 05f97bff authored by Georg Brandl's avatar Georg Brandl

Add a test case for exception pickling. args is never NULL.

parent ddba473e
......@@ -270,6 +270,8 @@ try:
'winerror' : 1 }))
except NameError: pass
import pickle, random
for args in exceptionList:
expected = args[-1]
try:
......@@ -283,3 +285,14 @@ for args in exceptionList:
( repr(e), checkArgName,
repr(expected[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)
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);
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 *res = NULL, *tmp;
/* self->args is only the first two real arguments if there was a
* file name given to EnvironmentError. */
if (PyTuple_GET_SIZE(args) == 2 && self->filename) {
......@@ -683,10 +677,13 @@ EnvironmentError_reduce(PyEnvironmentErrorObject *self)
Py_INCREF(self->filename);
PyTuple_SET_ITEM(args, 2, self->filename);
} else {
} else
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);
return res;
}
......
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