Bug #78397 [Csd->Asn]: Memory exhausted on custom recursion detection in phpunit
| From: | jeremy at derusse dot com | Date: | Thu, 11 Jun 2020 08:00:47 +0000 |
| Subject: | Bug #78397 [Csd->Asn]: Memory exhausted on custom recursion detection in phpunit | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-227414@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=78397&edit=1
ID: 78397
User updated by: jeremy at derusse dot com
Reported by: jeremy at derusse dot com
Summary: Memory exhausted on custom recursion detection in
phpunit
-Status: Closed
+Status: Assigned
Type: Bug
Package: Arrays related
Operating System: Linux
PHP Version: 7.2.21
Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Thanks for taking care of this bug @cmb.
Is it possible to cherrypick the commit in 7.2 (maintained until Nov 30th?)
Previous Comments:
------------------------------------------------------------------------
[2020-06-10 13:15:56] cmb@php.net
This issue is fixed as of PHP 7.3.0[1]
[1] <http://git.php.net/?p=php-src.git;a=commit;h=777187cbafb8c1844971169dc97d38a633094aaf>
------------------------------------------------------------------------
[2019-08-10 18:01:56] jeremy at derusse dot com
Description:
------------
We faced a segfault issue in Symfony test suite resumed to a simple empty PHPUnit script. https://github.com/sebastianbergmann/phpunit/issues/3790
after investigation, I found that PHPUnit detect circular reference in arrays by putting a marker in
the array, and check in the recurcion if the data have the marker => if yes it's a circular
reference.
This issue: in PHP 7.2 the reference is lost somehow and the recurcion is not detected which cause
either a segfault or a memory limit exeeded.
I tried to resume this issue to the simplest script possible (bellow).
output here: https://3v4l.org/6AASB
Few comments:
array_slice is totally useless in my code, but when I don't call it, everything
work. Maybe it's the originator of the issue => see https://3v4l.org/MFjQI
the method getData which returns the recursive reference array is also useless, but,
same as before, when I don't call it, everything work => https://3v4l.org/Q73bL
Test script:
---------------
<?php
function getData()
{
$a[0] = &$a;
return $a;
}
function recurcive(&$data)
{
array_slice($data, 0);
$data[] = 'X';
if (end($data[0]) !== 'X') {
recurcive($data[0]);
}
}
$data = getData();
recurcive($data);
Expected result:
----------------
no ouput
Actual result:
--------------
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 20480 bytes) in
/in/cDZmm on line 5
Process exited with code 255.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=78397&edit=1