com php-src: Fix bug #65548: Comparison for DateTimeImmutable doesn't work: NEWS ext/date/php_date.c ext/date/tests/bug6554 8.phpt
| From: | Nikita Popov | Date: | Thu, 12 Sep 2013 13:12:16 +0000 |
| Subject: | com php-src: Fix bug #65548: Comparison for DateTimeImmutable doesn't work: NEWS ext/date/php_date.c ext/date/tests/bug6554 8.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-73175@lists.php.net to get a copy of this message | ||
Commit: d7f5f1ef35c32d6943cd76a3c51752e8d64c5e5e
Author: Boro Sitnikovski <bsitnikovski@sugarcrm.com> Thu, 12 Sep 2013 01:15:54
+0200
Committer: Nikita Popov <nikic@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 <buritomath@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)