summaryrefslogtreecommitdiff
path: root/Lib/sqlite3
diff options
context:
space:
mode:
authorOren Milman <orenmn@gmail.com>2017-11-07 02:01:47 +0200
committerVictor Stinner <victor.stinner@gmail.com>2017-11-06 16:01:47 -0800
commite56ab746a965277ffcc4396d8a0902b6e072d049 (patch)
tree96300bfc9afd03c0314da3d9ed9b100d0764a1e2 /Lib/sqlite3
parentad455cd9243319b896c86074ffeb3bf78a82f4ec (diff)
downloadcpython-git-e56ab746a965277ffcc4396d8a0902b6e072d049.tar.gz
bpo-31770: Prevent a crash and refleaks when calling sqlite3.Cursor.__init__() more than once (#3968)
Diffstat (limited to 'Lib/sqlite3')
-rw-r--r--Lib/sqlite3/test/regression.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py
index 7dd0050528..3ff9abd989 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):
@@ -376,6 +378,22 @@ class RegressionTests(unittest.TestCase):
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")