Skip to content

Fix invalid Firebird isolation level proceeding with the connection#116

Open
iliaal wants to merge 1 commit into
PHP-8.4from
pdo_firebird-isolation-enforce
Open

Fix invalid Firebird isolation level proceeding with the connection#116
iliaal wants to merge 1 commit into
PHP-8.4from
pdo_firebird-isolation-enforce

Conversation

@iliaal

@iliaal iliaal commented Jun 21, 2026

Copy link
Copy Markdown
Owner

pdo_firebird_handle_factory() raised a ValueError for an out-of-range TRANSACTION_ISOLATION_LEVEL but only set ret = 0; zend_value_error() queues the exception without aborting, so control fell through into the isc_attach_database() block, opened the connection and overwrote ret with 1. The constructor then returned success with a pending ValueError and a live handle whose isolation level was never selected. Break out of the attach block when an exception is pending and skip the trailing fb_interpret() throw so the ValueError is the sole result; the existing !ret path runs firebird_handle_closer(), which is NULL-guarded on every field and safely frees the unused handle. Note: built against FreeBSD/Firebird is unavailable locally, so this was not compiled here; the change is two EG(exception) guards.

pdo_firebird_handle_factory() raised a ValueError for an out-of-range
TRANSACTION_ISOLATION_LEVEL but only set ret = 0; zend_value_error()
queues the exception without aborting, so control fell through into the
isc_attach_database() block, opened the connection and overwrote ret with
1. The constructor then returned success with a pending ValueError and a
live handle whose isolation level was never selected. Break out of the
attach block when an exception is pending and skip the trailing
fb_interpret() error so the ValueError is the sole result; the existing
!ret cleanup closes the unused handle.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant