GeezerVison is showing github.com — sqlite3: some code paths ignore exceptions · Issue #108083 · python/cpython
sqlite3: some code paths ignore exceptions #108083DescriptionOriginally posted by @vstinner in #108015 (comment):
Ignoring the exception here is a bug.
connection_finalize() clears any exception with PyErr_SetRaisedException(), but pysqlite_connection_close_impl() must not ignore silently error, since here we are talking about a raised Python exception! The function must report if an exception was raised. Then the caller is free to ignore it or not.
I suggest to continue ignoring it in finalize, but then write a separated PR to log the "unraisable exception".
Linked PRs
Activityserhiy-storchaka commented on Aug 18, 2023 I have not found a test for failing Connection.close(). Would it be possible to write one? Maybe in a separate issue. added 2 commits that reference this issue on Aug 18, 2023gh-108083: Don't ignore exceptions in sqlite3.Connection.__init__() a… erlend-aasland commented on Aug 19, 2023 ContributorAuthor More actions
I have not found a test for failing Connection.close(). Would it be possible to write one? Maybe in a separate issue.
It should be possible to force the implicit ROLLBACK in .close() to fail using some kind of database lock trick. Perhaps we could use a similar trick as in test_ctx_mgr_rollback_if_commit_failed. erlend-aasland commented on Aug 23, 2023 ContributorAuthor More actions Keeping this open until tests are added. serhiy-storchaka commented on Aug 23, 2023 erlend-aasland commented on Aug 23, 2023 ContributorAuthor More actions Yes, sqlite3_close_v2() returns SQLITE_OK if it is given a valid database handle.
sqlite3_close can return an error, but it is hard to see how to be able to trigger that from the constructor; I'm not sure it is possible. We could just as well use sqlite3_close_v2() in the constructor. vstinner commented on Aug 23, 2023 If closing a connection can fail but the sqlite3_close_v2() ignores errors, is there another API to "flush" a connection and reports errors?
If there is no easy way to trigger an error at exit or to report it, I suggest to just give up and close the issue. erlend-aasland commented on Aug 24, 2023 ContributorAuthor More actions
If there is no easy way to trigger an error at exit or to report it, I suggest to just give up and close the issue.
I don't think there is; the case is the constructor, between the sqlite3_open_v2 call and the following four goto error jumps. I don't see how we can provoke an error there.
Closing this as resolved. vstinner commented on Aug 24, 2023 Thanks, nice sqlite3 enhancement! Ignoring exceptions silently is never a good idea.
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|