diff options
author | Oren Milman <orenmn@gmail.com> | 2017-11-07 00:01:47 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2017-11-07 00:01:47 (GMT) |
commit | e56ab746a965277ffcc4396d8a0902b6e072d049 (patch) | |
tree | 96300bfc9afd03c0314da3d9ed9b100d0764a1e2 /Lib/sqlite3/test | |
parent | ad455cd9243319b896c86074ffeb3bf78a82f4ec (diff) | |
download | cpython-e56ab746a965277ffcc4396d8a0902b6e072d049.zip cpython-e56ab746a965277ffcc4396d8a0902b6e072d049.tar.gz cpython-e56ab746a965277ffcc4396d8a0902b6e072d049.tar.bz2 |
bpo-31770: Prevent a crash and refleaks when calling sqlite3.Cursor.__init__() more than once (#3968)
Diffstat (limited to 'Lib/sqlite3/test')
-rw-r--r-- | Lib/sqlite3/test/regression.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py index 7dd0050..3ff9abd 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") |