]> granicus.if.org Git - php/commitdiff
yet another dummy clone_obj handler to fix problems created by ze1 compat mode
authorAntony Dovgal <tony2001@php.net>
Tue, 6 Jun 2006 22:05:56 +0000 (22:05 +0000)
committerAntony Dovgal <tony2001@php.net>
Tue, 6 Jun 2006 22:05:56 +0000 (22:05 +0000)
ext/pdo/pdo_dbh.c

index 021c3efe8525923e58d07065647783b42bca029a..5a8996f866be9aee4605e19168566763a945c062 100755 (executable)
@@ -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;
 }