derick Tue Jul 8 17:41:51 2008 UTC
Added files: (Branch: PHP_5_3)
/php-src/ext/date/tests 015.phpt dateinterval_errors.phpt
Modified files:
/php-src/ext/date php_date.c
/php-src NEWS
Log:
- MFH: Fixed memory leaks and segfaults, patch by Joe Orton.
- MFH: Fixed bug #45038 (Crash when using DateTimeZone object returned by
Date::getTimezone).
http://cvs.php.net/viewvc.cgi/php-src/ext/date/php_date.c?r1=1.43.2.45.2.51.2.38&r2=1.43.2.45.2.51.2.39&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.51.2.38
php-src/ext/date/php_date.c:1.43.2.45.2.51.2.39
--- php-src/ext/date/php_date.c:1.43.2.45.2.51.2.38 Wed May 7 23:45:28 2008
+++ php-src/ext/date/php_date.c Tue Jul 8 17:41:51 2008
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_date.c,v 1.43.2.45.2.51.2.38 2008/05/07 23:45:28 iliaa Exp $ */
+/* $Id: php_date.c,v 1.43.2.45.2.51.2.39 2008/07/08 17:41:51 derick Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -1221,14 +1221,6 @@
timelib_update_ts(t, tzi);
ts = timelib_date_to_int(t, &error2);
- /* if tz_info is not a copy, avoid double free */
- if (now->tz_info != tzi && now->tz_info) {
- timelib_tzinfo_dtor(now->tz_info);
- }
- if (t->tz_info != tzi) {
- timelib_tzinfo_dtor(t->tz_info);
- }
-
timelib_time_dtor(now);
timelib_time_dtor(t);
@@ -1653,7 +1645,7 @@
newdateobj->time->tz_abbr = strdup(it_time->tz_abbr);
}
if (it_time->tz_info) {
- newdateobj->time->tz_info =
timelib_tzinfo_clone(it_time->tz_info);
+ newdateobj->time->tz_info = it_time->tz_info;
}
*data = &iterator->current;
@@ -1840,7 +1832,7 @@
new_obj->time->tz_abbr = strdup(old_obj->time->tz_abbr);
}
if (old_obj->time->tz_info) {
- new_obj->time->tz_info =
timelib_tzinfo_clone(old_obj->time->tz_info);
+ new_obj->time->tz_info = old_obj->time->tz_info;
}
return new_ov;
@@ -2053,9 +2045,6 @@
php_date_obj *intern = (php_date_obj *)object;
if (intern->time) {
- if (intern->time->tz_info) {
- timelib_tzinfo_dtor(intern->time->tz_info);
- }
timelib_time_dtor(intern->time);
}
@@ -2088,16 +2077,10 @@
php_period_obj *intern = (php_period_obj *)object;
if (intern->start) {
- if (intern->start->tz_info) {
- timelib_tzinfo_dtor(intern->start->tz_info);
- }
timelib_time_dtor(intern->start);
}
if (intern->end) {
- if (intern->end->tz_info) {
- timelib_tzinfo_dtor(intern->end->tz_info);
- }
timelib_time_dtor(intern->end);
}
@@ -2136,14 +2119,11 @@
timelib_time *now;
timelib_tzinfo *tzi;
timelib_error_container *err = NULL;
- int free_tzi = 0, type = TIMELIB_ZONETYPE_ID, new_dst;
+ int type = TIMELIB_ZONETYPE_ID, new_dst;
char *new_abbr;
timelib_sll new_offset;
if (dateobj->time) {
- if (dateobj->time->tz_info) {
- timelib_tzinfo_dtor(dateobj->time->tz_info);
- }
timelib_time_dtor(dateobj->time);
}
if (format) {
@@ -2171,8 +2151,7 @@
tzobj = (php_timezone_obj *)
zend_object_store_get_object(timezone_object TSRMLS_CC);
switch (tzobj->type) {
case TIMELIB_ZONETYPE_ID:
- tzi = timelib_tzinfo_clone(tzobj->tzi.tz);
- free_tzi = 1;
+ tzi = tzobj->tzi.tz;
break;
case TIMELIB_ZONETYPE_OFFSET:
new_offset = tzobj->tzi.utc_offset;
@@ -2185,8 +2164,7 @@
}
type = tzobj->type;
} else if (dateobj->time->tz_info) {
- tzi = timelib_tzinfo_clone(dateobj->time->tz_info);
- free_tzi = 1;
+ tzi = dateobj->time->tz_info;
} else {
tzi = get_timezone_info(TSRMLS_C);
}
@@ -2213,12 +2191,6 @@
dateobj->time->have_relative = 0;
- if (type == TIMELIB_ZONETYPE_ID && now->tz_info != tzi) {
- timelib_tzinfo_dtor(now->tz_info);
- }
- if (free_tzi) {
- timelib_tzinfo_dtor(tzi);
- }
timelib_time_dtor(now);
return 1;
@@ -2699,10 +2671,7 @@
if (tzobj->type != TIMELIB_ZONETYPE_ID) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can only do this
for zones with ID for now");
}
- if (dateobj->time->tz_info) {
- timelib_tzinfo_dtor(dateobj->time->tz_info);
- }
- timelib_set_timezone(dateobj->time,
timelib_tzinfo_clone(tzobj->tzi.tz));
+ timelib_set_timezone(dateobj->time, tzobj->tzi.tz);
timelib_unixtime2local(dateobj->time, dateobj->time->sse);
}
/* }}} */
@@ -3444,7 +3413,7 @@
clone->tz_abbr = strdup(dateobj->time->tz_abbr);
}
if (dateobj->time->tz_info) {
- clone->tz_info =
timelib_tzinfo_clone(dateobj->time->tz_info);
+ clone->tz_info = dateobj->time->tz_info;
}
dpobj->start = clone;
@@ -3460,7 +3429,7 @@
clone->tz_abbr = strdup(dateobj->time->tz_abbr);
}
if (dateobj->time->tz_info) {
- clone->tz_info =
timelib_tzinfo_clone(dateobj->time->tz_info);
+ clone->tz_info = dateobj->time->tz_info;
}
dpobj->end = clone;
}
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.196&r2=1.2027.2.547.2.965.2.197&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.965.2.196
php-src/NEWS:1.2027.2.547.2.965.2.197
--- php-src/NEWS:1.2027.2.547.2.965.2.196 Tue Jul 8 12:15:39 2008
+++ php-src/NEWS Tue Jul 8 17:41:51 2008
@@ -199,6 +199,8 @@
- Fixed PECL bug #12431 (OCI8 ping functionality is broken). (Oracle Corp.)
+- Fixed bug #45038 (Crash when using DateTimeZone object returned by
+ Date::getTimezone). (Joe Orton, Derick)
- Fixed bug #44769 (declaring private magic methods should throw error).
(Felipe)
- Fixed bug #44913 (Segfault when using return in combination with nested loops
and continue 2). (Dmitry)
http://cvs.php.net/viewvc.cgi/php-src/ext/date/tests/015.phpt?view=markup&rev=1.1
Index: php-src/ext/date/tests/015.phpt
+++ php-src/ext/date/tests/015.phpt
--TEST--
timezone object reference handling
--INI--
date.timezone=UTC
--FILE--
<?php
$dto = new DateTime();
$tzold = $dto->getTimezone();
var_dump($tzold->getName());
$dto->setTimezone(new DateTimeZone('US/Eastern'));
var_dump($tzold->getName());
var_dump($dto->getTimezone()->getName());
echo "Done\n";
?>
--EXPECTF--
unicode(3) "UTC"
unicode(3) "UTC"
unicode(10) "US/Eastern"
Done
http://cvs.php.net/viewvc.cgi/php-src/ext/date/tests/dateinterval_errors.phpt?view=markup&rev=1.1
Index: php-src/ext/date/tests/dateinterval_errors.phpt
+++ php-src/ext/date/tests/dateinterval_errors.phpt
--TEST--
DateInterval: Getter and setter errors
--FILE--
<?php
$d = DateInterval::createFromDateString("");
$d->y = 1984;
var_dump($d->y);
var_dump($d->asdf, $d->y);
?>
--EXPECTF--
int(1984)
Fatal error: main(): Unknown property (asdf) in %sdateinterval_errors.php on
line 5
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php