Skip to content

[PDO] Do not register bindColumn() binding after exception - #277

Open
iliaal wants to merge 1 commit into
PHP-8.4from
fix/pdo-bindcolumn-leak-84
Open

[PDO] Do not register bindColumn() binding after exception#277
iliaal wants to merge 1 commit into
PHP-8.4from
fix/pdo-bindcolumn-leak-84

Conversation

@iliaal

@iliaal iliaal commented Aug 24, 2026

Copy link
Copy Markdown
Owner

When ERRMODE_EXCEPTION is set, really_register_bound_param() raised the implementation error for an unknown column name but kept going and registered the binding in bound_columns anyway, so repeated failing bindColumn() calls with distinct names grew the hash without bound (about 33 MB over 200k calls). The fix aborts registration as soon as an exception is pending after pdo_raise_impl_error(); bindValue() and bindParam() take the is_param path where this mapping block is skipped, so they are unaffected. A new .phpt reproduces the growth before the patch and asserts no leak after.

When ERRMODE_EXCEPTION is set, really_register_bound_param() raised the
impl error for an unknown column name but continued registering the
binding into bound_columns, so repeated failing bindColumn() calls with
distinct names grew the hash without bound. Abort registration when an
exception is pending; bindValue()/bindParam() take the is_param path and
are unaffected.
@iliaal iliaal closed this Aug 24, 2026
@iliaal iliaal reopened this Aug 24, 2026
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