Merge branch 'PHP-8.0' into PHP-8.1

* PHP-8.0:
  Fix #81500: Interval serialization regression since 7.3.14 / 7.4.2
This commit is contained in:
Christoph M. Becker 2021-10-15 19:13:21 +02:00
commit 2e65c8e581
No known key found for this signature in database
GPG key ID: D66C9593118BCCB6
8 changed files with 27 additions and 11 deletions

4
NEWS
View file

@ -6,6 +6,10 @@ PHP NEWS
. Fixed bug #81518 (Header injection via default_mimetype / default_charset).
(cmb)
- Date:
. Fixed bug #81500 (Interval serialization regression since 7.3.14 / 7.4.2).
(cmb)
14 Oct 2021, PHP 8.1.0RC4
- CLI:

View file

@ -3850,7 +3850,7 @@ static zval *date_interval_write_property(zend_object *object, zend_string *name
SET_VALUE_FROM_STRUCT(i, "i");
SET_VALUE_FROM_STRUCT(s, "s");
if (zend_string_equals_literal(name, "f")) {
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");
@ -3968,12 +3968,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)

View file

@ -43,5 +43,5 @@ object(DateInterval)#%d (16) {
["have_special_relative"]=>
int(0)
["f"]=>
float(-1)
float(0)
}

View file

@ -43,5 +43,5 @@ object(DateInterval)#%d (16) {
["have_special_relative"]=>
int(0)
["f"]=>
float(-1)
float(0)
}

View file

@ -28,7 +28,7 @@ object(DateInterval)#%d (16) {
["s"]=>
int(-1)
["f"]=>
float(-1)
float(0)
["weekday"]=>
int(-1)
["weekday_behavior"]=>

View file

@ -20,7 +20,7 @@ object(DateInterval)#%d (16) {
["s"]=>
int(0)
["f"]=>
float(-1)
float(%f)
["weekday"]=>
int(0)
["weekday_behavior"]=>

View file

@ -0,0 +1,16 @@
--TEST--
Bug #81500 (Interval serialization regression since 7.3.14 / 7.4.2)
--FILE--
<?php
$interval = new DateInterval('PT1S');
$interval->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)

View file

@ -40,7 +40,7 @@ array(2) {
["s"]=>
int(-1)
["f"]=>
float(-1)
float(0)
["weekday"]=>
int(-1)
["weekday_behavior"]=>