From: Derick Rethans Date: Sun, 3 May 2009 18:46:28 +0000 (+0000) Subject: - MFH: Fixed bug #45682 (Unable to var_dump(DateInterval)). X-Git-Tag: php-5.3.0RC2~42 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=20a359a3fb97410f8ff0206b20661c7d4f6d7c77;p=php - MFH: Fixed bug #45682 (Unable to var_dump(DateInterval)). --- diff --git a/NEWS b/NEWS index 4e845e46b0..c8a92d97d1 100644 --- a/NEWS +++ b/NEWS @@ -117,6 +117,7 @@ PHP NEWS - Fixed bug #46048 (SimpleXML top-level @attributes not part of iterator). (David C.) - Fixed bug #45877 (Array key '2147483647' left as string). (Matt) +- Fixed bug #45682 (Unable to var_dump(DateInterval)). (Derick) - Fixed bug #45432 (PDO: persistent connection leak). (Felipe) - Fixed bug #43831 ($this gets mangled when extending PDO with persistent connection). (Felipe) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 4f2af1fb87..b4017ba995 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -548,6 +548,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); @@ -1951,6 +1952,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; @@ -2178,6 +2180,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..d8bbfc5a04 --- /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) + ["m"]=> + int(0) + ["d"]=> + int(3) + ["h"]=> + int(0) + ["i"]=> + int(0) + ["s"]=> + int(0) + ["invert"]=> + int(0) + ["days"]=> + int(3) +}