mike            Tue Aug 15 06:53:21 2006 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src/ext/date   php_date.c 
    /php-src/ext/date/tests     oo_002.phpt 
  Log:
  MFH:
   - fix leak when cloning DateTimeZone, detected by Antony
   - don't fetch objects multiple times when cloning
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/date/php_date.c?r1=1.43.2.45.2.24&r2=1.43.2.45.2.25&diff_format=u
Index: php-src/ext/date/php_date.c
diff -u php-src/ext/date/php_date.c:1.43.2.45.2.24 
php-src/ext/date/php_date.c:1.43.2.45.2.25
--- php-src/ext/date/php_date.c:1.43.2.45.2.24  Mon Aug 14 20:03:11 2006
+++ php-src/ext/date/php_date.c Tue Aug 15 06:53:21 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_date.c,v 1.43.2.45.2.24 2006/08/14 20:03:11 mike Exp $ */
+/* $Id: php_date.c,v 1.43.2.45.2.25 2006/08/15 06:53:21 mike Exp $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -1497,12 +1497,11 @@
 
 static zend_object_value date_object_clone_date(zval *this_ptr TSRMLS_DC)
 {
-       zend_object *old_zo = zend_objects_get_address(this_ptr TSRMLS_CC);
-       php_date_obj *old_obj = (php_date_obj *) 
zend_object_store_get_object(this_ptr TSRMLS_CC);
        php_date_obj *new_obj = NULL;
-       zend_object_value new_ov = date_object_new_date_ex(old_zo->ce, &new_obj 
TSRMLS_CC);
+       php_date_obj *old_obj = (php_date_obj *) 
zend_object_store_get_object(this_ptr TSRMLS_CC);
+       zend_object_value new_ov = date_object_new_date_ex(old_obj->std.ce, 
&new_obj TSRMLS_CC);
        
-       zend_objects_clone_members(&new_obj->std, new_ov, old_zo, 
Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC);
+       zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, 
Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC);
        
        /* this should probably moved to a new `timelib_time 
*timelime_time_clone(timelib_time *)` */
        new_obj->time = timelib_time_ctor();
@@ -1545,13 +1544,12 @@
 
 static zend_object_value date_object_clone_timezone(zval *this_ptr TSRMLS_DC)
 {
-       zend_object *old_zo = zend_objects_get_address(this_ptr TSRMLS_CC);
-       php_timezone_obj *old_obj = (php_timezone_obj *) 
zend_object_store_get_object(this_ptr TSRMLS_CC);
        php_timezone_obj *new_obj = NULL;
-       zend_object_value new_ov = date_object_new_timezone_ex(old_zo->ce, 
&new_obj TSRMLS_CC);
+       php_timezone_obj *old_obj = (php_timezone_obj *) 
zend_object_store_get_object(this_ptr TSRMLS_CC);
+       zend_object_value new_ov = date_object_new_timezone_ex(old_obj->std.ce, 
&new_obj TSRMLS_CC);
        
-       zend_objects_clone_members(&new_obj->std, new_ov, old_zo, 
Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC);
-       new_obj->tz = timelib_tzinfo_clone(old_obj->tz);
+       zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, 
Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC);
+       new_obj->tz = old_obj->tz;
        
        return new_ov;
 }
http://cvs.php.net/viewvc.cgi/php-src/ext/date/tests/oo_002.phpt?r1=1.1.2.2&r2=1.1.2.3&diff_format=u
Index: php-src/ext/date/tests/oo_002.phpt
diff -u php-src/ext/date/tests/oo_002.phpt:1.1.2.2 
php-src/ext/date/tests/oo_002.phpt:1.1.2.3
--- php-src/ext/date/tests/oo_002.phpt:1.1.2.2  Mon Aug 14 20:03:11 2006
+++ php-src/ext/date/tests/oo_002.phpt  Tue Aug 15 06:53:21 2006
@@ -14,7 +14,7 @@
 $c->modify("1 second ago");
 var_dump($d->format(DateTime::RFC822));
 var_dump($c->format(DateTime::RFC822));
-$t = new DateTimeZone("Asia/Tokyo");
+$t = new _t("Asia/Tokyo");
 var_dump($t->getName());
 $c = clone $t;
 var_dump($c->getName());

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to