From: Adam Harvey Date: Tue, 22 Mar 2011 08:33:22 +0000 (+0000) Subject: Fix bug #54340 (DateTime::add() method bug). X-Git-Tag: php-5.4.0alpha1~191^2~129 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=991ba13174bb95a6a0c4849bdcd4883e335bf493;p=php Fix bug #54340 (DateTime::add() method bug). --- diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 4aff73fcb6..56c6f8e976 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2855,14 +2855,13 @@ PHP_FUNCTION(date_add) if (intobj->diff->invert) { bias = -1; } + memset(&dateobj->time->relative, 0, sizeof(struct timelib_rel_time)); dateobj->time->relative.y = intobj->diff->y * bias; dateobj->time->relative.m = intobj->diff->m * bias; dateobj->time->relative.d = intobj->diff->d * bias; dateobj->time->relative.h = intobj->diff->h * bias; dateobj->time->relative.i = intobj->diff->i * bias; dateobj->time->relative.s = intobj->diff->s * bias; - dateobj->time->relative.weekday = 0; - dateobj->time->relative.have_weekday_relative = 0; } dateobj->time->have_relative = 1; dateobj->time->sse_uptodate = 0; @@ -2902,6 +2901,7 @@ PHP_FUNCTION(date_sub) bias = -1; } + memset(&dateobj->time->relative, 0, sizeof(struct timelib_rel_time)); dateobj->time->relative.y = 0 - (intobj->diff->y * bias); dateobj->time->relative.m = 0 - (intobj->diff->m * bias); dateobj->time->relative.d = 0 - (intobj->diff->d * bias); @@ -2909,8 +2909,6 @@ PHP_FUNCTION(date_sub) dateobj->time->relative.i = 0 - (intobj->diff->i * bias); dateobj->time->relative.s = 0 - (intobj->diff->s * bias); dateobj->time->have_relative = 1; - dateobj->time->relative.weekday = 0; - dateobj->time->relative.have_weekday_relative = 0; dateobj->time->sse_uptodate = 0; timelib_update_ts(dateobj->time, NULL); diff --git a/ext/date/tests/bug54340.phpt b/ext/date/tests/bug54340.phpt new file mode 100644 index 0000000000..7f00309c93 --- /dev/null +++ b/ext/date/tests/bug54340.phpt @@ -0,0 +1,43 @@ +--TEST-- +Bug #54340 (DateTime::add() method bug) +--INI-- +date.timezone=UTC +--FILE-- +add($interval); +var_dump($dt); + +$dt = new DateTime('first day of January 2011'); + +$dt->sub($interval); +var_dump($dt); +--EXPECT-- +object(DateTime)#2 (3) { + ["date"]=> + string(19) "2011-01-01 00:00:00" + ["timezone_type"]=> + int(3) + ["timezone"]=> + string(3) "UTC" +} +object(DateTime)#2 (3) { + ["date"]=> + string(19) "2011-01-02 00:00:00" + ["timezone_type"]=> + int(3) + ["timezone"]=> + string(3) "UTC" +} +object(DateTime)#3 (3) { + ["date"]=> + string(19) "2010-12-31 00:00:00" + ["timezone_type"]=> + int(3) + ["timezone"]=> + string(3) "UTC" +}