diff options
author | Erlend Egeberg Aasland <erlend.aasland@innova.no> | 2021-06-03 15:53:47 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-03 15:53:47 (GMT) |
commit | 82ad22a97d4b5d7134424f12bd6a61167db7f4f8 (patch) | |
tree | 753b308bddf46e8b6ea4d468539a237601e8ece7 /Lib/sqlite3 | |
parent | 937cebc93b4922583218e0cbf0a9a14705a595b2 (diff) | |
download | cpython-82ad22a97d4b5d7134424f12bd6a61167db7f4f8.zip cpython-82ad22a97d4b5d7134424f12bd6a61167db7f4f8.tar.gz cpython-82ad22a97d4b5d7134424f12bd6a61167db7f4f8.tar.bz2 |
bpo-42213: Check connection in sqlite3.Connection.__enter__ (GH-26512)
Try to harden connection close:
- add tests that exercise stuff against a closed database
- add wrapper for sqlite3_close_v2()
- check connection on __enter__
- explicitly free pending statements before close()
- sqlite3_close_v2() always returns SQLITE_OK
Diffstat (limited to 'Lib/sqlite3')
-rw-r--r-- | Lib/sqlite3/test/dbapi.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/Lib/sqlite3/test/dbapi.py b/Lib/sqlite3/test/dbapi.py index 39c9bf5..ab33135 100644 --- a/Lib/sqlite3/test/dbapi.py +++ b/Lib/sqlite3/test/dbapi.py @@ -135,6 +135,26 @@ class ConnectionTests(unittest.TestCase): def test_close(self): self.cx.close() + def test_use_after_close(self): + sql = "select 1" + cu = self.cx.cursor() + res = cu.execute(sql) + self.cx.close() + self.assertRaises(sqlite.ProgrammingError, res.fetchall) + self.assertRaises(sqlite.ProgrammingError, cu.execute, sql) + self.assertRaises(sqlite.ProgrammingError, cu.executemany, sql, []) + self.assertRaises(sqlite.ProgrammingError, cu.executescript, sql) + self.assertRaises(sqlite.ProgrammingError, self.cx.execute, sql) + self.assertRaises(sqlite.ProgrammingError, + self.cx.executemany, sql, []) + self.assertRaises(sqlite.ProgrammingError, self.cx.executescript, sql) + self.assertRaises(sqlite.ProgrammingError, + self.cx.create_function, "t", 1, lambda x: x) + self.assertRaises(sqlite.ProgrammingError, self.cx.cursor) + with self.assertRaises(sqlite.ProgrammingError): + with self.cx: + pass + def test_exceptions(self): # Optional DB-API extension. self.assertEqual(self.cx.Warning, sqlite.Warning) |