Bug #78397 [Ver->Csd]: Memory exhausted on custom recursion detection in phpunit

From: Date: Wed, 10 Jun 2020 13:15:56 +0000
Subject: Bug #78397 [Ver->Csd]: Memory exhausted on custom recursion detection in phpunit
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-227408@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 Updated by: cmb@php.net Reported by: jeremy at derusse dot com Summary: Memory exhausted on custom recursion detection in phpunit -Status: Verified +Status: Closed Type: Bug Package: Arrays related Operating System: Linux PHP Version: 7.2.21 -Assigned To: +Assigned To: cmb Block user comment: N Private report: N New Comment: This issue is fixed as of PHP 7.3.0[1] [1] <http://git.php.net/?p=php-src.git;a=commit;h=777187cbafb8c1844971169dc97d38a633094aaf> Previous Comments: ------------------------------------------------------------------------ [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

« previous php.bugs (#227408) next »