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