Commit f2469f6684f for php

commit f2469f6684f4f3c429daaadbfb62b3fe7c188117
Merge: 4a735661632 71e56ed7a97
Author: Ilia Alshanetsky <ilia@ilia.ws>
Date:   Wed Sep 30 13:27:53 2026 -0400

    Merge branch 'PHP-8.4' into PHP-8.5

    * PHP-8.4:
      ext/pdo: Report bound params and columns to GC

diff --cc ext/pdo/pdo_stmt.c
index 1077823d7ee,9afdc52a229..d0bb89ea6a2
--- a/ext/pdo/pdo_stmt.c
+++ b/ext/pdo/pdo_stmt.c
@@@ -2048,19 -2154,26 +2048,35 @@@ out
  static HashTable *dbstmt_get_gc(zend_object *object, zval **gc_data, int *gc_count)
  {
  	pdo_stmt_t *stmt = php_pdo_stmt_fetch_object(object);
 +	enum pdo_fetch_type default_fetch_mode = stmt->default_fetch_type & ~PDO_FETCH_FLAGS;

  	zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create();
 -	zend_get_gc_buffer_add_zval(gc_buffer, &stmt->database_object_handle);
 -	zend_get_gc_buffer_add_zval(gc_buffer, &stmt->fetch.into);
 +	if (stmt->database_object_handle) {
 +		zend_get_gc_buffer_add_obj(gc_buffer, stmt->database_object_handle);
 +	}
 +	if (default_fetch_mode == PDO_FETCH_INTO) {
 +		if (stmt->fetch.into) {
 +			zend_get_gc_buffer_add_obj(gc_buffer, stmt->fetch.into);
 +		}
 +	} else if (default_fetch_mode == PDO_FETCH_CLASS && stmt->fetch.cls.ctor_args != NULL) {
 +		zend_get_gc_buffer_add_ht(gc_buffer, stmt->fetch.cls.ctor_args);
 +	}
+ 	if (stmt->bound_params) {
+ 		zval *val;
+ 		ZEND_HASH_FOREACH_VAL(stmt->bound_params, val) {
+ 			struct pdo_bound_param_data *param = Z_PTR_P(val);
+ 			zend_get_gc_buffer_add_zval(gc_buffer, &param->parameter);
+ 			zend_get_gc_buffer_add_zval(gc_buffer, &param->driver_params);
+ 		} ZEND_HASH_FOREACH_END();
+ 	}
+ 	if (stmt->bound_columns) {
+ 		zval *val;
+ 		ZEND_HASH_FOREACH_VAL(stmt->bound_columns, val) {
+ 			struct pdo_bound_param_data *param = Z_PTR_P(val);
+ 			zend_get_gc_buffer_add_zval(gc_buffer, &param->parameter);
+ 			zend_get_gc_buffer_add_zval(gc_buffer, &param->driver_params);
+ 		} ZEND_HASH_FOREACH_END();
+ 	}
  	zend_get_gc_buffer_use(gc_buffer, gc_data, gc_count);

  	/**