summaryrefslogtreecommitdiff
path: root/ext/date/php_date.c
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2019-10-18 15:32:58 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2019-10-18 15:33:25 +0200
commit197568d634bea320f4efb2b93105747872316ad9 (patch)
treebb12a97ff17a14a791a709d0d607ee108b63338e /ext/date/php_date.c
parenta6a2d167d8311fbca950f92f1771f66d02683b9d (diff)
parentc7c7ab53ac28fc64625511e1c2be37036f5f89c1 (diff)
downloadphp-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.c16
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);