From d29aa1c437a8ebca639fd9fa2f99fd2bc4fb500d Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Fri, 12 Oct 2018 22:37:50 +0100 Subject: [PATCH] Fixed refcount in connection's readonly and deferrable getters Close #790 --- NEWS | 2 ++ psycopg/connection_type.c | 2 ++ tests/test_connection.py | 8 ++++++++ 3 files changed, 12 insertions(+) diff --git a/NEWS b/NEWS index 21db9dd8..0a5f3dc0 100644 --- a/NEWS +++ b/NEWS @@ -38,6 +38,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 da421c01..6ac02269 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 498f3513..f9fdff6c 100755 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -803,6 +803,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):