Skip to content

Commit 2e65c8e

Browse files
committed
Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0: Fix #81500: Interval serialization regression since 7.3.14 / 7.4.2
2 parents 371a268 + fc88669 commit 2e65c8e

File tree

8 files changed

+27
-11
lines changed

8 files changed

+27
-11
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ PHP NEWS
66
. Fixed bug #81518 (Header injection via default_mimetype / default_charset).
77
(cmb)
88

9+
- Date:
10+
. Fixed bug #81500 (Interval serialization regression since 7.3.14 / 7.4.2).
11+
(cmb)
12+
913
14 Oct 2021, PHP 8.1.0RC4
1014

1115
- CLI:

ext/date/php_date.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3850,7 +3850,7 @@ static zval *date_interval_write_property(zend_object *object, zend_string *name
38503850
SET_VALUE_FROM_STRUCT(i, "i");
38513851
SET_VALUE_FROM_STRUCT(s, "s");
38523852
if (zend_string_equals_literal(name, "f")) {
3853-
obj->diff->us = zval_get_double(value) * 1000000;
3853+
obj->diff->us = zend_dval_to_lval(zval_get_double(value) * 1000000.0);
38543854
break;
38553855
}
38563856
SET_VALUE_FROM_STRUCT(invert, "invert");
@@ -3968,12 +3968,8 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter
39683968
PHP_DATE_INTERVAL_READ_PROPERTY("s", s, timelib_sll, -1)
39693969
{
39703970
zval *z_arg = zend_hash_str_find(myht, "f", sizeof("f") - 1);
3971-
(*intobj)->diff->us = -1000000;
39723971
if (z_arg) {
3973-
double val = zval_get_double(z_arg) * 1000000;
3974-
if (val >= 0 && val < 1000000) {
3975-
(*intobj)->diff->us = val;
3976-
}
3972+
(*intobj)->diff->us = zend_dval_to_lval(zval_get_double(z_arg) * 1000000.0);
39773973
}
39783974
}
39793975
PHP_DATE_INTERVAL_READ_PROPERTY("weekday", weekday, int, -1)

ext/date/tests/bug53437_var3.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,5 @@ object(DateInterval)#%d (16) {
4343
["have_special_relative"]=>
4444
int(0)
4545
["f"]=>
46-
float(-1)
46+
float(0)
4747
}

ext/date/tests/bug53437_var5.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,5 @@ object(DateInterval)#%d (16) {
4343
["have_special_relative"]=>
4444
int(0)
4545
["f"]=>
46-
float(-1)
46+
float(0)
4747
}

ext/date/tests/bug73091.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ object(DateInterval)#%d (16) {
2828
["s"]=>
2929
int(-1)
3030
["f"]=>
31-
float(-1)
31+
float(0)
3232
["weekday"]=>
3333
int(-1)
3434
["weekday_behavior"]=>

ext/date/tests/bug79015.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ object(DateInterval)#%d (16) {
2020
["s"]=>
2121
int(0)
2222
["f"]=>
23-
float(-1)
23+
float(%f)
2424
["weekday"]=>
2525
int(0)
2626
["weekday_behavior"]=>

ext/date/tests/bug81500.phpt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
Bug #81500 (Interval serialization regression since 7.3.14 / 7.4.2)
3+
--FILE--
4+
<?php
5+
$interval = new DateInterval('PT1S');
6+
$interval->f = -0.000001;
7+
var_dump($interval->s, $interval->f);
8+
9+
$interval = unserialize(serialize($interval));
10+
var_dump($interval->s, $interval->f);
11+
?>
12+
--EXPECT--
13+
int(1)
14+
float(-1.0E-6)
15+
int(1)
16+
float(-1.0E-6)

ext/standard/tests/serialize/bug69425.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ array(2) {
4040
["s"]=>
4141
int(-1)
4242
["f"]=>
43-
float(-1)
43+
float(0)
4444
["weekday"]=>
4545
int(-1)
4646
["weekday_behavior"]=>

0 commit comments

Comments
 (0)