diff --git a/NEWS b/NEWS index ab86b7d5..12c06a24 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,8 @@ What's new in psycopg 2.7.6 (:ticket:`#746`). - Fixed building on modern FreeBSD versions with Python 3.7 (:ticket:`#755`). - Fixed hang trying to :sql:`COPY` via `~cursor.execute()` (:ticket:`#781`). +- Fixed segfault accessing the `connection.readonly` and + `connection.deferrable` repeatedly (:ticket:`#790`). What's new in psycopg 2.7.5 diff --git a/psycopg/connection_type.c b/psycopg/connection_type.c index 6a66d48d..8ecb3568 100644 --- a/psycopg/connection_type.c +++ b/psycopg/connection_type.c @@ -757,6 +757,7 @@ psyco_conn_readonly_get(connectionObject *self) break; } + Py_XINCREF(rv); return rv; } @@ -803,6 +804,7 @@ psyco_conn_deferrable_get(connectionObject *self) break; } + Py_XINCREF(rv); return rv; } diff --git a/tests/test_connection.py b/tests/test_connection.py index d8b86d7d..15d0040b 100755 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -804,6 +804,14 @@ class IsolationLevelsTestCase(ConnectingTestCase): self.assertRaises(ValueError, setattr, self.conn, 'isolation_level', 5) self.assertRaises(ValueError, setattr, self.conn, 'isolation_level', 'bah') + def test_attribs_segfault(self): + # bug #790 + for i in range(10000): + self.conn.autocommit + self.conn.readonly + self.conn.deferrable + self.conn.isolation_level + class ConnectionTwoPhaseTests(ConnectingTestCase): def setUp(self):