From 9efb9daffe8ebfc704bb8bb4934bcfa97c11167e Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Sun, 3 May 2009 18:45:06 +0000 Subject: [PATCH] - Fixed bug #45682 (Unable to var_dump(DateInterval)). --- ext/date/php_date.c | 30 ++++++++++++++++++++++++++++++ ext/date/tests/bug45682.phpt | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 ext/date/tests/bug45682.phpt diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 29ce6607d1..d04baeb778 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -555,6 +555,7 @@ static zend_object_value date_object_clone_period(zval *this_ptr TSRMLS_DC); static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC); static HashTable *date_object_get_properties(zval *object TSRMLS_DC); +static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC); zval *date_interval_read_property(zval *object, zval *member, int type TSRMLS_DC); void date_interval_write_property(zval *object, zval *member, zval *value TSRMLS_DC); @@ -2063,6 +2064,7 @@ static void date_register_classes(TSRMLS_D) date_object_handlers_interval.clone_obj = date_object_clone_interval; date_object_handlers_interval.read_property = date_interval_read_property; date_object_handlers_interval.write_property = date_interval_write_property; + date_object_handlers_interval.get_properties = date_object_get_properties_interval; INIT_CLASS_ENTRY(ce_period, "DatePeriod", date_funcs_period); ce_period.create_object = date_object_new_period; @@ -2292,6 +2294,34 @@ static zend_object_value date_object_clone_interval(zval *this_ptr TSRMLS_DC) return new_ov; } +static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) +{ + HashTable *props; + zval *zv; + php_interval_obj *intervalobj; + + + intervalobj = (php_interval_obj *) zend_object_store_get_object(object TSRMLS_CC); + + props = intervalobj->std.properties; + +#define PHP_DATE_INTERVAL_ADD_PROPERTY(n,f) \ + MAKE_STD_ZVAL(zv); \ + ZVAL_LONG(zv, intervalobj->diff->f); \ + zend_hash_update(props, n, strlen(n) + 1, &zv, sizeof(zval), NULL); + + PHP_DATE_INTERVAL_ADD_PROPERTY("y", y); + PHP_DATE_INTERVAL_ADD_PROPERTY("m", m); + PHP_DATE_INTERVAL_ADD_PROPERTY("d", d); + PHP_DATE_INTERVAL_ADD_PROPERTY("h", h); + PHP_DATE_INTERVAL_ADD_PROPERTY("i", i); + PHP_DATE_INTERVAL_ADD_PROPERTY("s", s); + PHP_DATE_INTERVAL_ADD_PROPERTY("invert", invert); + PHP_DATE_INTERVAL_ADD_PROPERTY("days", days); + + return props; +} + static inline zend_object_value date_object_new_period_ex(zend_class_entry *class_type, php_period_obj **ptr TSRMLS_DC) { php_period_obj *intern; diff --git a/ext/date/tests/bug45682.phpt b/ext/date/tests/bug45682.phpt new file mode 100644 index 0000000000..99cbf5271a --- /dev/null +++ b/ext/date/tests/bug45682.phpt @@ -0,0 +1,32 @@ +--TEST-- +Bug #45682 (Unable to var_dump(DateInterval)) +--INI-- +date.timezone=UTC +--FILE-- + + int(0) + [u"m"]=> + int(0) + [u"d"]=> + int(3) + [u"h"]=> + int(0) + [u"i"]=> + int(0) + [u"s"]=> + int(0) + [u"invert"]=> + int(0) + [u"days"]=> + int(3) +} -- 2.40.0