derick Thu Jan 17 19:58:24 2008 UTC Added files: /php-src/ext/date/tests bug43003.phpt
Modified files: /php-src/ext/date php_date.c Log: - Fixed bug #43003 (Invalid timezone reported for DateTime objects constructed using a timestamp). http://cvs.php.net/viewvc.cgi/php-src/ext/date/php_date.c?r1=1.154&r2=1.155&diff_format=u Index: php-src/ext/date/php_date.c diff -u php-src/ext/date/php_date.c:1.154 php-src/ext/date/php_date.c:1.155 --- php-src/ext/date/php_date.c:1.154 Thu Jan 17 18:48:43 2008 +++ php-src/ext/date/php_date.c Thu Jan 17 19:58:24 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_date.c,v 1.154 2008/01/17 18:48:43 derick Exp $ */ +/* $Id: php_date.c,v 1.155 2008/01/17 19:58:24 derick Exp $ */ #include "php.h" #include "php_streams.h" @@ -276,6 +276,7 @@ struct _php_timezone_obj { zend_object std; + int initialized; int type; union { timelib_tzinfo *tz; // TIMELIB_ZONETYPE_ID; @@ -1762,6 +1763,7 @@ zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC); new_obj->type = old_obj->type; + new_obj->initialized = 1; switch (new_obj->type) { case TIMELIB_ZONETYPE_ID: new_obj->tzi.tz = old_obj->tzi.tz; @@ -2210,6 +2212,7 @@ if (dateobj->time->is_localtime/* && dateobj->time->tz_info*/) { date_instantiate(date_ce_timezone, return_value TSRMLS_CC); tzobj = (php_timezone_obj *) zend_object_store_get_object(return_value TSRMLS_CC); + tzobj->initialized = 1; tzobj->type = dateobj->time->zone_type; switch (dateobj->time->zone_type) { case TIMELIB_ZONETYPE_ID: @@ -2435,6 +2438,7 @@ tzobj = zend_object_store_get_object(getThis() TSRMLS_CC); tzobj->type = TIMELIB_ZONETYPE_ID; tzobj->tzi.tz = tzi; + tzobj->initialized = 1; } else { ZVAL_NULL(getThis()); } @@ -2455,7 +2459,7 @@ RETURN_FALSE; } tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(tzobj->tzi.tz, DateTimeZone); + DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: @@ -2518,7 +2522,7 @@ RETURN_FALSE; } tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(tzobj->tzi.tz, DateTimeZone); + DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); dateobj = (php_date_obj *) zend_object_store_get_object(dateobject TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); @@ -2541,7 +2545,7 @@ RETURN_FALSE; } tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(tzobj->tzi.tz, DateTimeZone); + DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); if (tzobj->type != TIMELIB_ZONETYPE_ID) { RETURN_FALSE; } http://cvs.php.net/viewvc.cgi/php-src/ext/date/tests/bug43003.phpt?view=markup&rev=1.1 Index: php-src/ext/date/tests/bug43003.phpt +++ php-src/ext/date/tests/bug43003.phpt --TEST-- Bug #43003 (Invalid timezone reported for DateTime objects constructed using a timestamp) --FILE-- <?php $oDateTest = new DateTime("@0", new DateTimeZone(date_default_timezone_get())); echo $oDateTest->getTimezone()->getName().": " . $oDateTest->format("Y-m-d H:i:s")."\n"; $oDateTest->setTimezone(new DateTimeZone("UTC")); echo $oDateTest->getTimezone()->getName().": " . $oDateTest->format("Y-m-d H:i:s")."\n"; $oDateTest->setTimezone(new DateTimeZone(date_default_timezone_get())); echo $oDateTest->getTimezone()->getName().": " . $oDateTest->format("Y-m-d H:i:s")."\n"; $oDateTest = new DateTime("@0"); echo $oDateTest->getTimezone()->getName().": " . $oDateTest->format("Y-m-d H:i:s")."\n"; $oDateTest->setTimezone( new DateTimeZone(date_default_timezone_get())); echo $oDateTest->getTimezone()->getName().": " . $oDateTest->format("Y-m-d H:i:s")."\n"; ?> --EXPECT-- +00:00: 1970-01-01 00:00:00 UTC: 1970-01-01 00:00:00 Europe/Oslo: 1970-01-01 01:00:00 +00:00: 1970-01-01 00:00:00 Europe/Oslo: 1970-01-01 01:00:00 -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php