@@ -667,12 +667,12 @@ static zend_object *date_object_clone_period(zval *this_ptr);
667667
668668static int date_object_compare_date (zval * d1 , zval * d2 );
669669static HashTable * date_object_get_gc (zval * object , zval * * table , int * n );
670- static HashTable * date_object_get_properties (zval * object );
670+ static HashTable * date_object_get_properties_for (zval * object , zend_prop_purpose purpose );
671671static HashTable * date_object_get_gc_interval (zval * object , zval * * table , int * n );
672672static HashTable * date_object_get_properties_interval (zval * object );
673673static HashTable * date_object_get_gc_period (zval * object , zval * * table , int * n );
674674static HashTable * date_object_get_properties_period (zval * object );
675- static HashTable * date_object_get_properties_timezone (zval * object );
675+ static HashTable * date_object_get_properties_for_timezone (zval * object , zend_prop_purpose purpose );
676676static HashTable * date_object_get_gc_timezone (zval * object , zval * * table , int * n );
677677static HashTable * date_object_get_debug_info_timezone (zval * object , int * is_temp );
678678static void php_timezone_to_string (php_timezone_obj * tzobj , zval * zv );
@@ -2123,7 +2123,7 @@ static void date_register_classes(void) /* {{{ */
21232123 date_object_handlers_date .free_obj = date_object_free_storage_date ;
21242124 date_object_handlers_date .clone_obj = date_object_clone_date ;
21252125 date_object_handlers_date .compare_objects = date_object_compare_date ;
2126- date_object_handlers_date .get_properties = date_object_get_properties ;
2126+ date_object_handlers_date .get_properties_for = date_object_get_properties_for ;
21272127 date_object_handlers_date .get_gc = date_object_get_gc ;
21282128 zend_class_implements (date_ce_date , 1 , date_ce_interface );
21292129
@@ -2133,7 +2133,7 @@ static void date_register_classes(void) /* {{{ */
21332133 memcpy (& date_object_handlers_immutable , & std_object_handlers , sizeof (zend_object_handlers ));
21342134 date_object_handlers_immutable .clone_obj = date_object_clone_date ;
21352135 date_object_handlers_immutable .compare_objects = date_object_compare_date ;
2136- date_object_handlers_immutable .get_properties = date_object_get_properties ;
2136+ date_object_handlers_immutable .get_properties_for = date_object_get_properties_for ;
21372137 date_object_handlers_immutable .get_gc = date_object_get_gc ;
21382138 zend_class_implements (date_ce_immutable , 1 , date_ce_interface );
21392139
@@ -2144,7 +2144,7 @@ static void date_register_classes(void) /* {{{ */
21442144 date_object_handlers_timezone .offset = XtOffsetOf (php_timezone_obj , std );
21452145 date_object_handlers_timezone .free_obj = date_object_free_storage_timezone ;
21462146 date_object_handlers_timezone .clone_obj = date_object_clone_timezone ;
2147- date_object_handlers_timezone .get_properties = date_object_get_properties_timezone ;
2147+ date_object_handlers_timezone .get_properties_for = date_object_get_properties_for_timezone ;
21482148 date_object_handlers_timezone .get_gc = date_object_get_gc_timezone ;
21492149 date_object_handlers_timezone .get_debug_info = date_object_get_debug_info_timezone ;
21502150
@@ -2273,17 +2273,24 @@ static HashTable *date_object_get_gc_timezone(zval *object, zval **table, int *n
22732273 return zend_std_get_properties (object );
22742274} /* }}} */
22752275
2276- static HashTable * date_object_get_properties (zval * object ) /* {{{ */
2276+ static HashTable * date_object_get_properties_for (zval * object , zend_prop_purpose purpose ) /* {{{ */
22772277{
22782278 HashTable * props ;
22792279 zval zv ;
2280- php_date_obj * dateobj ;
2280+ php_date_obj * dateobj ;
22812281
2282+ switch (purpose ) {
2283+ case ZEND_PROP_PURPOSE_DEBUG :
2284+ case ZEND_PROP_PURPOSE_SERIALIZE :
2285+ case ZEND_PROP_PURPOSE_VAR_EXPORT :
2286+ case ZEND_PROP_PURPOSE_JSON :
2287+ break ;
2288+ default :
2289+ return zend_std_get_properties_for (object , purpose );
2290+ }
22822291
22832292 dateobj = Z_PHPDATE_P (object );
2284-
2285- props = zend_std_get_properties (object );
2286-
2293+ props = zend_array_dup (zend_std_get_properties (object ));
22872294 if (!dateobj -> time ) {
22882295 return props ;
22892296 }
@@ -2387,16 +2394,24 @@ static void php_timezone_to_string(php_timezone_obj *tzobj, zval *zv)
23872394 }
23882395}
23892396
2390- static HashTable * date_object_get_properties_timezone (zval * object ) /* {{{ */
2397+ static HashTable * date_object_get_properties_for_timezone (zval * object , zend_prop_purpose purpose ) /* {{{ */
23912398{
23922399 HashTable * props ;
23932400 zval zv ;
2394- php_timezone_obj * tzobj ;
2395-
2396- tzobj = Z_PHPTIMEZONE_P (object );
2401+ php_timezone_obj * tzobj ;
23972402
2398- props = zend_std_get_properties (object );
2403+ switch (purpose ) {
2404+ case ZEND_PROP_PURPOSE_DEBUG :
2405+ case ZEND_PROP_PURPOSE_SERIALIZE :
2406+ case ZEND_PROP_PURPOSE_VAR_EXPORT :
2407+ case ZEND_PROP_PURPOSE_JSON :
2408+ break ;
2409+ default :
2410+ return zend_std_get_properties_for (object , purpose );
2411+ }
23992412
2413+ tzobj = Z_PHPTIMEZONE_P (object );
2414+ props = zend_array_dup (zend_std_get_properties (object ));
24002415 if (!tzobj -> initialized ) {
24012416 return props ;
24022417 }
@@ -2468,12 +2483,10 @@ static HashTable *date_object_get_properties_interval(zval *object) /* {{{ */
24682483{
24692484 HashTable * props ;
24702485 zval zv ;
2471- php_interval_obj * intervalobj ;
2486+ php_interval_obj * intervalobj ;
24722487
24732488 intervalobj = Z_PHPINTERVAL_P (object );
2474-
24752489 props = zend_std_get_properties (object );
2476-
24772490 if (!intervalobj -> initialized ) {
24782491 return props ;
24792492 }
@@ -5094,9 +5107,7 @@ static HashTable *date_object_get_properties_period(zval *object) /* {{{ */
50945107 php_period_obj * period_obj ;
50955108
50965109 period_obj = Z_PHPPERIOD_P (object );
5097-
50985110 props = zend_std_get_properties (object );
5099-
51005111 if (!period_obj -> start ) {
51015112 return props ;
51025113 }
0 commit comments