Skip to content

ext/sqlite3: reject close() from inside a callback - #23650

Open
iliaal wants to merge 1 commit into
php:PHP-8.4from
iliaal:fix/sqlite3-close-callback-84
Open

ext/sqlite3: reject close() from inside a callback#23650
iliaal wants to merge 1 commit into
php:PHP-8.4from
iliaal:fix/sqlite3-close-callback-84

Conversation

@iliaal

@iliaal iliaal commented Sep 10, 2026

Copy link
Copy Markdown
Member

SQLite3::close() from a userland function, aggregate, collation, or authorizer callback finalized statements while SQLite was still in the callback and crashed. close() now throws if a per-database callback counter is non-zero; the handle remains usable until the query finishes.

Comment on lines +11 to +13
} catch (Error $e) {
echo $e::class, ": ", $e->getMessage(), "\n";
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
} catch (Error $e) {
echo $e::class, ": ", $e->getMessage(), "\n";
}
} catch (Throwable $e) {
echo $e::class, ": ", $e->getMessage(), "\n";
}

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

@iliaal
iliaal force-pushed the fix/sqlite3-close-callback-84 branch from 79db33f to a9cc101 Compare September 11, 2026 10:49
SQLite3::close() called from within a userland function, aggregate,
collation or authorizer callback freed the registered statements and
functions while sqlite3 was still executing, corrupting the active
statement and crashing the request. Track callback re-entry with a
per-database counter shared by all four callback kinds and throw an
Error from close() while it is non-zero; the database stays usable and
can be closed after the query completes.
@iliaal
iliaal force-pushed the fix/sqlite3-close-callback-84 branch from a9cc101 to 5c7eec5 Compare September 11, 2026 11:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants