From e5c8f8c59b3dc3ec960167aa7ca77ef74e5462d9 Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Tue, 6 Jun 2006 22:05:56 +0000 Subject: [PATCH] yet another dummy clone_obj handler to fix problems created by ze1 compat mode --- ext/pdo/pdo_dbh.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index 021c3efe85..5a8996f866 100755 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -1251,7 +1251,14 @@ static int dbh_compare(zval *object1, zval *object2 TSRMLS_DC) return -1; } +static zend_object_value dbh_ze1_clone_obj(zval *object TSRMLS_DC) +{ + php_error(E_ERROR, "Cannot clone object of class %s due to 'zend.ze1_compatibility_mode'", Z_OBJCE_P(object)->name); + return object->value.obj; +} + static zend_object_handlers pdo_dbh_object_handlers; +static zend_object_handlers pdo_dbh_object_handlers_ze1; void pdo_dbh_init(TSRMLS_D) { @@ -1264,6 +1271,11 @@ void pdo_dbh_init(TSRMLS_D) memcpy(&pdo_dbh_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); pdo_dbh_object_handlers.get_method = dbh_method_get; pdo_dbh_object_handlers.compare_objects = dbh_compare; + + memcpy(&pdo_dbh_object_handlers_ze1, &std_object_handlers, sizeof(zend_object_handlers)); + pdo_dbh_object_handlers_ze1.get_method = dbh_method_get; + pdo_dbh_object_handlers_ze1.compare_objects = dbh_compare; + pdo_dbh_object_handlers_ze1.clone_obj = dbh_ze1_clone_obj; REGISTER_PDO_CLASS_CONST_LONG("PARAM_BOOL", (long)PDO_PARAM_BOOL); REGISTER_PDO_CLASS_CONST_LONG("PARAM_NULL", (long)PDO_PARAM_NULL); @@ -1447,7 +1459,7 @@ zend_object_value pdo_dbh_new(zend_class_entry *ce TSRMLS_DC) dbh->def_stmt_ce = pdo_dbstmt_ce; retval.handle = zend_objects_store_put(dbh, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)pdo_dbh_free_storage, NULL TSRMLS_CC); - retval.handlers = &pdo_dbh_object_handlers; + retval.handlers = EG(ze1_compatibility_mode) ? &pdo_dbh_object_handlers_ze1 : &pdo_dbh_object_handlers; return retval; } -- 2.40.0