Skip to content

Commit fc88669

Browse files
committed
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4: Fix #81500: Interval serialization regression since 7.3.14 / 7.4.2
2 parents 9f98bc5 + 866adb1 commit fc88669

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
- Opcache:
1014
. Fixed bug #81512 (Unexpected behavior with arrays and JIT). (Dmitry)
1115

ext/date/php_date.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3802,7 +3802,7 @@ static zval *date_interval_write_property(zend_object *object, zend_string *name
38023802
SET_VALUE_FROM_STRUCT(i, "i");
38033803
SET_VALUE_FROM_STRUCT(s, "s");
38043804
if (strcmp(ZSTR_VAL(name), "f") == 0) {
3805-
obj->diff->us = zval_get_double(value) * 1000000;
3805+
obj->diff->us = zend_dval_to_lval(zval_get_double(value) * 1000000.0);
38063806
break;
38073807
}
38083808
SET_VALUE_FROM_STRUCT(invert, "invert");
@@ -3919,12 +3919,8 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter
39193919
PHP_DATE_INTERVAL_READ_PROPERTY("s", s, timelib_sll, -1)
39203920
{
39213921
zval *z_arg = zend_hash_str_find(myht, "f", sizeof("f") - 1);
3922-
(*intobj)->diff->us = -1000000;
39233922
if (z_arg) {
3924-
double val = zval_get_double(z_arg) * 1000000;
3925-
if (val >= 0 && val < 1000000) {
3926-
(*intobj)->diff->us = val;
3927-
}
3923+
(*intobj)->diff->us = zend_dval_to_lval(zval_get_double(z_arg) * 1000000.0);
39283924
}
39293925
}
39303926
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)