@@ -656,8 +656,9 @@ static HashTable *date_object_get_gc_timezone(zval *object, zval **table, int *n
656
656
static HashTable * date_object_get_debug_info_timezone (zval * object , int * is_temp );
657
657
static void php_timezone_to_string (php_timezone_obj * tzobj , zval * zv );
658
658
659
- zval * date_interval_read_property (zval * object , zval * member , int type , void * * cache_slot , zval * rv );
660
- zval * date_interval_write_property (zval * object , zval * member , zval * value , void * * cache_slot );
659
+ static int date_interval_compare_objects (zval * o1 , zval * o2 );
660
+ static zval * date_interval_read_property (zval * object , zval * member , int type , void * * cache_slot , zval * rv );
661
+ static zval * date_interval_write_property (zval * object , zval * member , zval * value , void * * cache_slot );
661
662
static zval * date_interval_get_property_ptr_ptr (zval * object , zval * member , int type , void * * cache_slot );
662
663
static zval * date_period_read_property (zval * object , zval * member , int type , void * * cache_slot , zval * rv );
663
664
static zval * date_period_write_property (zval * object , zval * member , zval * value , void * * cache_slot );
@@ -2164,6 +2165,7 @@ static void date_register_classes(void) /* {{{ */
2164
2165
date_object_handlers_interval .get_properties = date_object_get_properties_interval ;
2165
2166
date_object_handlers_interval .get_property_ptr_ptr = date_interval_get_property_ptr_ptr ;
2166
2167
date_object_handlers_interval .get_gc = date_object_get_gc_interval ;
2168
+ date_object_handlers_interval .compare_objects = date_interval_compare_objects ;
2167
2169
2168
2170
INIT_CLASS_ENTRY (ce_period , "DatePeriod" , date_funcs_period );
2169
2171
ce_period .create_object = date_object_new_period ;
@@ -4142,8 +4144,16 @@ static int date_interval_initialize(timelib_rel_time **rt, /*const*/ char *forma
4142
4144
return retval ;
4143
4145
} /* }}} */
4144
4146
4147
+ static int date_interval_compare_objects (zval * o1 , zval * o2 ) {
4148
+ /* There is no well defined way to compare intervals like P1M and P30D, which may compare
4149
+ * smaller, equal or greater depending on the point in time at which the interval starts. As
4150
+ * such, we treat DateInterval objects are non-comparable and emit a warning. */
4151
+ zend_error (E_WARNING , "Cannot compare DateInterval objects" );
4152
+ return 1 ;
4153
+ }
4154
+
4145
4155
/* {{{ date_interval_read_property */
4146
- zval * date_interval_read_property (zval * object , zval * member , int type , void * * cache_slot , zval * rv )
4156
+ static zval * date_interval_read_property (zval * object , zval * member , int type , void * * cache_slot , zval * rv )
4147
4157
{
4148
4158
php_interval_obj * obj ;
4149
4159
zval * retval ;
@@ -4214,7 +4224,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, void **c
4214
4224
/* }}} */
4215
4225
4216
4226
/* {{{ date_interval_write_property */
4217
- zval * date_interval_write_property (zval * object , zval * member , zval * value , void * * cache_slot )
4227
+ static zval * date_interval_write_property (zval * object , zval * member , zval * value , void * * cache_slot )
4218
4228
{
4219
4229
php_interval_obj * obj ;
4220
4230
zval tmp_member ;
0 commit comments