]> granicus.if.org Git - php/commitdiff
Fixed clone bug in ze1_compatibilty mode
authorDmitry Stogov <dmitry@php.net>
Thu, 4 Aug 2005 08:36:54 +0000 (08:36 +0000)
committerDmitry Stogov <dmitry@php.net>
Thu, 4 Aug 2005 08:36:54 +0000 (08:36 +0000)
Zend/zend_objects.c

index 9bd1761ee898476675867b6c26b696872dc4fe79..9b5b85422038a9f452d12e511725e8b587ffc450 100644 (file)
@@ -115,7 +115,7 @@ ZEND_API zend_object *zend_objects_get_address(zval *zobject TSRMLS_DC)
 
 static void zval_add_ref_or_clone(zval **p)
 {
-       if (Z_TYPE_PP(p) == IS_OBJECT) {
+       if (Z_TYPE_PP(p) == IS_OBJECT && !PZVAL_IS_REF(*p)) {
                TSRMLS_FETCH();
 
                if (Z_OBJ_HANDLER_PP(p, clone_obj) == NULL) {
@@ -126,7 +126,7 @@ static void zval_add_ref_or_clone(zval **p)
                        ALLOC_ZVAL(*p);
                        **p = *orig;
                        INIT_PZVAL(*p);
-                       (*p)->value.obj = Z_OBJ_HT_PP(p)->clone_obj(*p TSRMLS_CC);
+                       (*p)->value.obj = Z_OBJ_HT_PP(p)->clone_obj(orig TSRMLS_CC);
                }
        } else {
                (*p)->refcount++;