mirror of
https://github.com/psycopg/psycopg2.git
synced 2024-11-22 17:06:33 +03:00
Fixed pickling of exceptions with no pgerror/pgcode set
Fixes ticket #170.
This commit is contained in:
parent
81e8b869d0
commit
345077d5f7
7
NEWS
7
NEWS
|
@ -1,6 +1,13 @@
|
|||
Current release
|
||||
---------------
|
||||
|
||||
What's new in psycopg 2.5.2
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- Fixed segfault pickling the exception raised on connection error
|
||||
(:ticket:`#170`).
|
||||
|
||||
|
||||
What's new in psycopg 2.5.1
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
|
|
@ -163,8 +163,16 @@ psyco_error_reduce(errorObject *self)
|
|||
if (2 != PyTuple_GET_SIZE(tuple)) { goto exit; }
|
||||
|
||||
if (!(dict = PyDict_New())) { goto error; }
|
||||
if (0 != PyDict_SetItemString(dict, "pgerror", self->pgerror)) { goto error; }
|
||||
if (0 != PyDict_SetItemString(dict, "pgcode", self->pgcode)) { goto error; }
|
||||
if (self->pgerror) {
|
||||
if (0 != PyDict_SetItemString(dict, "pgerror", self->pgerror)) {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
if (self->pgcode) {
|
||||
if (0 != PyDict_SetItemString(dict, "pgcode", self->pgcode)) {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PyObject *newtuple;
|
||||
|
|
|
@ -279,6 +279,21 @@ class ExceptionsTestCase(ConnectingTestCase):
|
|||
self.assertEqual(e.pgcode, e1.pgcode)
|
||||
self.assert_(e1.cursor is None)
|
||||
|
||||
@skip_before_python(2, 5)
|
||||
def test_pickle_connection_error(self):
|
||||
# segfaults on psycopg 2.5.1 - see ticket #170
|
||||
import pickle
|
||||
try:
|
||||
psycopg2.connect('dbname=nosuchdatabasemate')
|
||||
except psycopg2.Error, exc:
|
||||
e = exc
|
||||
|
||||
e1 = pickle.loads(pickle.dumps(e))
|
||||
|
||||
self.assertEqual(e.pgerror, e1.pgerror)
|
||||
self.assertEqual(e.pgcode, e1.pgcode)
|
||||
self.assert_(e1.cursor is None)
|
||||
|
||||
|
||||
def test_suite():
|
||||
return unittest.TestLoader().loadTestsFromName(__name__)
|
||||
|
|
Loading…
Reference in New Issue
Block a user