diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 189e4355f5d46..e1a427c5ca4cf 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4331,7 +4331,7 @@ static zval *date_interval_write_property(zval *object, zval *member, zval *valu SET_VALUE_FROM_STRUCT(i, "i"); SET_VALUE_FROM_STRUCT(s, "s"); if (strcmp(Z_STRVAL_P(member), "f") == 0) { - obj->diff->us = zval_get_double(value) * 1000000; + obj->diff->us = zend_dval_to_lval(zval_get_double(value) * 1000000.0); break; } SET_VALUE_FROM_STRUCT(invert, "invert"); @@ -4468,12 +4468,8 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter PHP_DATE_INTERVAL_READ_PROPERTY("s", s, timelib_sll, -1) { zval *z_arg = zend_hash_str_find(myht, "f", sizeof("f") - 1); - (*intobj)->diff->us = -1000000; if (z_arg) { - double val = zval_get_double(z_arg) * 1000000; - if (val >= 0 && val < 1000000) { - (*intobj)->diff->us = val; - } + (*intobj)->diff->us = zend_dval_to_lval(zval_get_double(z_arg) * 1000000.0); } } PHP_DATE_INTERVAL_READ_PROPERTY("weekday", weekday, int, -1) diff --git a/ext/date/tests/bug53437_var3.phpt b/ext/date/tests/bug53437_var3.phpt index 6738f14be792e..cf0d07451c328 100644 --- a/ext/date/tests/bug53437_var3.phpt +++ b/ext/date/tests/bug53437_var3.phpt @@ -44,6 +44,6 @@ object(DateInterval)#%d (16) { ["have_special_relative"]=> int(0) ["f"]=> - float(-1) + float(0) } ==DONE== diff --git a/ext/date/tests/bug53437_var5.phpt b/ext/date/tests/bug53437_var5.phpt index 38783b15456bd..abd7313051e60 100644 --- a/ext/date/tests/bug53437_var5.phpt +++ b/ext/date/tests/bug53437_var5.phpt @@ -44,6 +44,6 @@ object(DateInterval)#%d (16) { ["have_special_relative"]=> int(0) ["f"]=> - float(-1) + float(0) } ==DONE== diff --git a/ext/date/tests/bug73091.phpt b/ext/date/tests/bug73091.phpt index 14f161afe7468..918170d823fb1 100644 --- a/ext/date/tests/bug73091.phpt +++ b/ext/date/tests/bug73091.phpt @@ -28,7 +28,7 @@ object(DateInterval)#%d (16) { ["s"]=> int(-1) ["f"]=> - float(-1) + float(0) ["weekday"]=> int(-1) ["weekday_behavior"]=> diff --git a/ext/date/tests/bug79015.phpt b/ext/date/tests/bug79015.phpt index 5ebb13832b796..9d752dee7221e 100644 --- a/ext/date/tests/bug79015.phpt +++ b/ext/date/tests/bug79015.phpt @@ -20,7 +20,7 @@ object(DateInterval)#%d (16) { ["s"]=> int(0) ["f"]=> - float(-1) + float(%f) ["weekday"]=> int(0) ["weekday_behavior"]=> diff --git a/ext/date/tests/bug81500.phpt b/ext/date/tests/bug81500.phpt new file mode 100644 index 0000000000000..0c60c204a34db --- /dev/null +++ b/ext/date/tests/bug81500.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #81500 (Interval serialization regression since 7.3.14 / 7.4.2) +--FILE-- +f = -0.000001; +var_dump($interval->s, $interval->f); + +$interval = unserialize(serialize($interval)); +var_dump($interval->s, $interval->f); +?> +--EXPECT-- +int(1) +float(-1.0E-6) +int(1) +float(-1.0E-6) diff --git a/ext/standard/tests/serialize/bug69425.phpt b/ext/standard/tests/serialize/bug69425.phpt index c7f426578981f..f44aae91cbb1b 100644 --- a/ext/standard/tests/serialize/bug69425.phpt +++ b/ext/standard/tests/serialize/bug69425.phpt @@ -40,7 +40,7 @@ array(2) { ["s"]=> int(-1) ["f"]=> - float(-1) + float(0) ["weekday"]=> int(-1) ["weekday_behavior"]=>