diff --git a/Misc/NEWS.d/next/Library/2026-07-19-15-53-06.gh-issue-154109.uPm_M0.rst b/Misc/NEWS.d/next/Library/2026-07-19-15-53-06.gh-issue-154109.uPm_M0.rst new file mode 100644 index 00000000000000..a566068795356d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-07-19-15-53-06.gh-issue-154109.uPm_M0.rst @@ -0,0 +1,2 @@ +Fix memory leak in :meth:`sqlite3.Connection.load_extension` when +:exc:`sqlite3.OperationalError` is raised. diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index f8bd3a8df35b66..77db1665f30023 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -1770,6 +1770,7 @@ pysqlite_connection_load_extension_impl(pysqlite_Connection *self, rc = sqlite3_load_extension(self->db, extension_name, entrypoint, &errmsg); if (rc != 0) { PyErr_SetString(self->OperationalError, errmsg); + sqlite3_free((void *)errmsg); return NULL; } else { Py_RETURN_NONE;