From a66c34a6d098623617d675191a4c82f60de1d662 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Wed, 5 Apr 2017 14:05:59 +0100 Subject: [PATCH] Don't clobber a Python exception with an unknown error Close #410 --- NEWS | 1 + psycopg/pqpath.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/NEWS b/NEWS index 84be2015..a0399a15 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,7 @@ What's new in psycopg 2.7.2 - Fixed inconsistent state in externally closed connections (:tickets:`#263, #311, #443`). Was fixed in 2.6.2 but not included in 2.7 by mistake. +- Fixed Python exceptions propagation in green callback (:ticket:`#410`). - Don't display the password in `connection.dsn` when the connection string is specified as an URI (:ticket:`#528`). - Return objects with timezone parsing "infinity" :sql:`timestamptz` diff --git a/psycopg/pqpath.c b/psycopg/pqpath.c index f270ce8f..55720724 100644 --- a/psycopg/pqpath.c +++ b/psycopg/pqpath.c @@ -451,6 +451,10 @@ pq_complete_error(connectionObject *conn, PGresult **pgres, char **error) else { if (*error != NULL) { PyErr_SetString(OperationalError, *error); + } else if (PyErr_Occurred()) { + /* There was a Python error (e.g. in the callback). Don't clobber + * it with an unknown exception. (see #410) */ + Dprintf("pq_complete_error: forwarding Python exception"); } else { PyErr_SetString(OperationalError, "unknown error"); }