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

From: 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

« previous php.bugs (#227414) next »