diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2019-10-18 15:32:58 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2019-10-18 15:33:25 +0200 |
commit | 197568d634bea320f4efb2b93105747872316ad9 (patch) | |
tree | bb12a97ff17a14a791a709d0d607ee108b63338e /ext/date/php_date.c | |
parent | a6a2d167d8311fbca950f92f1771f66d02683b9d (diff) | |
parent | c7c7ab53ac28fc64625511e1c2be37036f5f89c1 (diff) | |
download | php-git-197568d634bea320f4efb2b93105747872316ad9.tar.gz |
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
Fix #70153 \DateInterval incorrectly unserialized
Diffstat (limited to 'ext/date/php_date.c')
-rw-r--r-- | ext/date/php_date.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 65e8213dda..b76c4c9a7e 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4396,6 +4396,20 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter } \ } while (0); +#define PHP_DATE_INTERVAL_READ_PROPERTY_DAYS(member) \ + do { \ + zval *z_arg = zend_hash_str_find(myht, "days", sizeof("days") - 1); \ + if (z_arg && Z_TYPE_P(z_arg) == IS_FALSE) { \ + (*intobj)->diff->member = -99999; \ + } else if (z_arg && Z_TYPE_P(z_arg) <= IS_STRING) { \ + zend_string *str = zval_get_string(z_arg); \ + DATE_A64I((*intobj)->diff->member, ZSTR_VAL(str)); \ + zend_string_release(str); \ + } else { \ + (*intobj)->diff->member = -1LL; \ + } \ + } while (0); + #define PHP_DATE_INTERVAL_READ_PROPERTY_DOUBLE(element, member, def) \ do { \ zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ @@ -4424,7 +4438,7 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter PHP_DATE_INTERVAL_READ_PROPERTY("weekday_behavior", weekday_behavior, int, -1) PHP_DATE_INTERVAL_READ_PROPERTY("first_last_day_of", first_last_day_of, int, -1) PHP_DATE_INTERVAL_READ_PROPERTY("invert", invert, int, 0); - PHP_DATE_INTERVAL_READ_PROPERTY_I64("days", days); + PHP_DATE_INTERVAL_READ_PROPERTY_DAYS(days); PHP_DATE_INTERVAL_READ_PROPERTY("special_type", special.type, unsigned int, 0); PHP_DATE_INTERVAL_READ_PROPERTY_I64("special_amount", special.amount); PHP_DATE_INTERVAL_READ_PROPERTY("have_weekday_relative", have_weekday_relative, unsigned int, 0); |