Commit: d7f5f1ef35c32d6943cd76a3c51752e8d64c5e5e Author: Boro Sitnikovski <bsitnikov...@sugarcrm.com> Thu, 12 Sep 2013 01:15:54 +0200 Committer: Nikita Popov <ni...@php.net> Thu, 12 Sep 2013 15:12:16 +0200 Parents: d209c362d2d59b0ceb82ff300cc868933ae23a06 Branches: PHP-5.5 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=d7f5f1ef35c32d6943cd76a3c51752e8d64c5e5e Log: Fix bug #65548: Comparison for DateTimeImmutable doesn't work Bugs: https://bugs.php.net/65548 Changed paths: M NEWS M ext/date/php_date.c A ext/date/tests/bug65548.phpt Diff: diff --git a/NEWS b/NEWS index df7f9d5..6575bd9 100644 --- a/NEWS +++ b/NEWS @@ -36,6 +36,8 @@ PHP NEWS . Fixed bug #65458 (curl memory leak). (Adam) - Datetime: + . Fixed bug #65548 (Comparison for DateTimeImmutable doesn't work). + (Boro Sitnikovski) . Fixed bug #65554 (createFromFormat broken when weekday name is followed by some delimiters). (Valentin Logvinskiy, Stas). . Fixed bug #65564 (stack-buffer-overflow in DateTimeZone stuff caught diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 95c68f1..bb96227 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2142,27 +2142,21 @@ static zval* date_clone_immutable(zval *object TSRMLS_DC) static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC) { - if (Z_TYPE_P(d1) == IS_OBJECT && Z_TYPE_P(d2) == IS_OBJECT && - instanceof_function(Z_OBJCE_P(d1), date_ce_date TSRMLS_CC) && - instanceof_function(Z_OBJCE_P(d2), date_ce_date TSRMLS_CC)) { - php_date_obj *o1 = zend_object_store_get_object(d1 TSRMLS_CC); - php_date_obj *o2 = zend_object_store_get_object(d2 TSRMLS_CC); - - if (!o1->time || !o2->time) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Trying to compare an incomplete DateTime object"); - return 1; - } - if (!o1->time->sse_uptodate) { - timelib_update_ts(o1->time, o1->time->tz_info); - } - if (!o2->time->sse_uptodate) { - timelib_update_ts(o2->time, o2->time->tz_info); - } - - return (o1->time->sse == o2->time->sse) ? 0 : ((o1->time->sse < o2->time->sse) ? -1 : 1); + php_date_obj *o1 = zend_object_store_get_object(d1 TSRMLS_CC); + php_date_obj *o2 = zend_object_store_get_object(d2 TSRMLS_CC); + + if (!o1->time || !o2->time) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Trying to compare an incomplete DateTime or DateTimeImmutable object"); + return 1; + } + if (!o1->time->sse_uptodate) { + timelib_update_ts(o1->time, o1->time->tz_info); + } + if (!o2->time->sse_uptodate) { + timelib_update_ts(o2->time, o2->time->tz_info); } - return 1; + return (o1->time->sse == o2->time->sse) ? 0 : ((o1->time->sse < o2->time->sse) ? -1 : 1); } static HashTable *date_object_get_gc(zval *object, zval ***table, int *n TSRMLS_DC) diff --git a/ext/date/tests/bug65548.phpt b/ext/date/tests/bug65548.phpt new file mode 100644 index 0000000..53f2519 --- /dev/null +++ b/ext/date/tests/bug65548.phpt @@ -0,0 +1,34 @@ +--TEST-- +Test for bug #65548: Comparison for DateTimeImmutable doesn't work +--CREDITS-- +Boro Sitnikovski <buritom...@yahoo.com> +--INI-- +date.timezone = UTC +--FILE-- +<?php +$iToday = new DateTimeImmutable('today'); +$iTomorrow = new DateTimeImmutable('tomorrow'); + +$mToday = new DateTime('today'); +$mTomorrow = new DateTime('tomorrow'); + +var_dump($iToday < $iTomorrow); +var_dump($iToday == $iTomorrow); +var_dump($iToday > $iTomorrow); + +var_dump($iToday == $mToday); +var_dump($iToday === $mToday); + +var_dump($iToday < $mTomorrow); +var_dump($iToday == $mTomorrow); +var_dump($iToday > $mTomorrow); +?> +--EXPECT-- +bool(true) +bool(false) +bool(false) +bool(true) +bool(false) +bool(true) +bool(false) +bool(false) -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php