Bug #81500 [Com]: Interval serialization regression since 7.3.14 / 7.4.2

From: Date: Fri, 15 Oct 2021 11:49:49 +0000
Subject: Bug #81500 [Com]: Interval serialization regression since 7.3.14 / 7.4.2
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-237211@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81500&edit=1 ID: 81500 Comment by: alec at alec dot pl Reported by: kylekatarnls at gmail dot com Summary: Interval serialization regression since 7.3.14 / 7.4.2 Status: Assigned Type: Bug Package: Date/time related PHP Version: 8.0.11 Assigned To: cmb Block user comment: N Private report: N New Comment: My two cents. I see two issues here: 1. The type is int, but should be float. 2. If it's supposed to not accept negative numbers (which I agree), then I'd expect it to be converted to 0 not -1. Former is an obvious bug, but for the latter I'm not sure. What's a usual PHP behavior is such cases. Previous Comments: ------------------------------------------------------------------------ [2021-10-13 10:47:36] cmb@php.net The following pull request has been associated: Patch Name: Fix #81500: Interval serialization regression since 7.3.14 / 7.4.2 On GitHub: https://github.com/php/php-src/pull/7575 Patch: https://github.com/php/php-src/pull/7575.patch ------------------------------------------------------------------------ [2021-10-12 09:37:07] cmb@php.net The following pull request has been associated: Patch Name: Fix #81500: Interval serialization regression since 7.3.14 / 7.4.2 On GitHub: https://github.com/php/php-src/pull/7572 Patch: https://github.com/php/php-src/pull/7572.patch ------------------------------------------------------------------------ [2021-10-12 09:36:44] cmb@php.net Well, actually the *un*serialization is correct, because negative values of DateInterval::$f are not supposed to be supported. ------------------------------------------------------------------------ [2021-10-06 08:24:15] cmb@php.net That's caused by the fix for bug #79015. ------------------------------------------------------------------------ [2021-10-04 11:28:53] kylekatarnls at gmail dot com Description: ------------ When DateInterval f property = -0.000001, it's properly restored as float(-1.0E-6) after unserialize(serialize()) until PHP 7.3.13 / 7.4.1 but since 7.3.14 / 7.4.2 and all >= 8, it becomes int(-1) See https://3v4l.org/t5N4d Test script: --------------- $interval = new DateInterval('PT1S'); $interval->f = -0.000001; var_dump($interval->s, $interval->f); echo "\n"; $interval = unserialize(serialize($interval)); var_dump($interval->s, $interval->f); Expected result: ---------------- int(1) float(-1.0E-6) int(1) float(-1.0E-6) Actual result: -------------- int(1) float(-1.0E-6) int(1) int(-1) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=81500&edit=1

« previous php.bugs (#237211) next »