mike Tue Aug 15 06:53:02 2006 UTC
Modified files:
/php-src/ext/date php_date.c
/php-src/ext/date/tests oo_002.phpt
Log:
- 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.111&r2=1.112&diff_format=u
Index: php-src/ext/date/php_date.c
diff -u php-src/ext/date/php_date.c:1.111 php-src/ext/date/php_date.c:1.112
--- php-src/ext/date/php_date.c:1.111 Mon Aug 14 20:02:52 2006
+++ php-src/ext/date/php_date.c Tue Aug 15 06:53:02 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_date.c,v 1.111 2006/08/14 20:02:52 mike Exp $ */
+/* $Id: php_date.c,v 1.112 2006/08/15 06:53:02 mike Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -1625,12 +1625,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();
@@ -1673,13 +1672,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&r2=1.2&diff_format=u
Index: php-src/ext/date/tests/oo_002.phpt
diff -u php-src/ext/date/tests/oo_002.phpt:1.1
php-src/ext/date/tests/oo_002.phpt:1.2
--- php-src/ext/date/tests/oo_002.phpt:1.1 Mon Aug 14 20:02:52 2006
+++ php-src/ext/date/tests/oo_002.phpt Tue Aug 15 06:53:02 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