[PDO] Report bound params/columns to GC and fix driver_params refcount - #302
Open
iliaal wants to merge 1 commit into
Open
[PDO] Report bound params/columns to GC and fix driver_params refcount#302iliaal wants to merge 1 commit into
iliaal wants to merge 1 commit into
Conversation
PDOStatement::get_gc() never reported the bound_params and bound_columns hash tables, so cycles through bindParam()/bindColumn() arguments were invisible to the collector and leaked permanently. Additionally, since 5b8d0dc register_bound_param() ZVAL_COPY'd driver_params while really_register_bound_param() addref'd it again, storing one zval with two references, which kept even correctly reported cycles uncollectable; the extra addref is removed and the failure path now releases the caller's reference. Sibling audit: free_obj destroys both hashtables and param_dtor releases driver_params, other get_gc sites unaffected.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PDOStatement::get_gc() never reported the bound_params and bound_columns hash tables, so cycles created through the bindParam()/bindColumn() driver_params argument were invisible to the collector and leaked permanently; both hashtables are now walked and their zvals added to the GC buffer like the sibling handlers do. A sibling audit found a related refcount bug that kept even correctly reported cycles uncollectable: since 5b8d0dc register_bound_param() ZVAL_COPYs driver_params while really_register_bound_param() addrefs it again, storing one zval with two references; the extra addref is removed and registration failure in register_bound_param() now releases the caller's reference. The new phpt fails on unpatched PHP-8.4 (destructors never run) and passes with the patch.