diff options
author | Pablo Galindo <Pablogsal@gmail.com> | 2021-06-05 02:50:39 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-05 02:50:39 (GMT) |
commit | fa106a685c1f199aca5be5c2d0277a14cc9057bd (patch) | |
tree | bfca3ae142a9bff2241102fef5b3b459701dbd67 /Lib/sqlite3 | |
parent | f171877ebe276749f31386baed5841ce37cbee2e (diff) | |
download | cpython-fa106a685c1f199aca5be5c2d0277a14cc9057bd.zip cpython-fa106a685c1f199aca5be5c2d0277a14cc9057bd.tar.gz cpython-fa106a685c1f199aca5be5c2d0277a14cc9057bd.tar.bz2 |
bpo-44304: Fix crash in the sqlite3 module when the GC clears Statement objects (GH-26545)
Diffstat (limited to 'Lib/sqlite3')
-rw-r--r-- | Lib/sqlite3/test/userfunctions.py | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/Lib/sqlite3/test/userfunctions.py b/Lib/sqlite3/test/userfunctions.py index 6f57d19..4290890 100644 --- a/Lib/sqlite3/test/userfunctions.py +++ b/Lib/sqlite3/test/userfunctions.py @@ -23,6 +23,7 @@ import unittest import unittest.mock +import gc import sqlite3 as sqlite def func_returntext(): @@ -322,6 +323,22 @@ class FunctionTests(unittest.TestCase): with self.assertRaises(TypeError): self.con.create_function("deterministic", 0, int, True) + def test_function_destructor_via_gc(self): + # See bpo-44304: The destructor of the user function can + # crash if is called without the GIL from the gc functions + dest = sqlite.connect(':memory:') + def md5sum(t): + return + + dest.create_function("md5", 1, md5sum) + x = dest("create table lang (name, first_appeared)") + del md5sum, dest + + y = [x] + y.append(y) + + del x,y + gc.collect() class AggregateTests(unittest.TestCase): def setUp(self): |