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

From: Date: Fri, 16 Aug 2019 11:10:36 +0000
Subject: Bug #78397 [Opn->Ver]: Memory exhausted on custom recursion detection in phpunit
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-222270@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: sjon@php.net Reported by: jeremy at derusse dot com -Summary: Issue with variable pass +Summary: Memory exhausted on custom recursion detection in phpunit -Status: Open +Status: Verified Type: Bug Package: Arrays related Operating System: Linux PHP Version: 7.2.21 Block user comment: N Private report: N 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 (#222270) next »