bpo-31770: Prevent a crash and refleaks when calling sqlite3.Cursor.__init__() more than once (GH-3968) (#4302)
(cherry picked from commit e56ab746a965277ffcc4396d8a0902b6e072d049)
diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py
index 36fec59..323b25d 100644
--- a/Lib/sqlite3/test/regression.py
+++ b/Lib/sqlite3/test/regression.py
@@ -24,6 +24,8 @@
import datetime
import unittest
import sqlite3 as sqlite
+import weakref
+from test import support
class RegressionTests(unittest.TestCase):
def setUp(self):
@@ -358,6 +360,22 @@
counter += 1
self.assertEqual(counter, 3, "should have returned exactly three rows")
+ def CheckBpo31770(self):
+ """
+ The interpreter shouldn't crash in case Cursor.__init__() is called
+ more than once.
+ """
+ def callback(*args):
+ pass
+ con = sqlite.connect(":memory:")
+ cur = sqlite.Cursor(con)
+ ref = weakref.ref(cur, callback)
+ cur.__init__(con)
+ del cur
+ # The interpreter shouldn't crash when ref is collected.
+ del ref
+ support.gc_collect()
+
def suite():
regression_suite = unittest.makeSuite(RegressionTests, "Check")