php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #75716 RecursiveArrayIterator does not traverse vars by reference
Submitted: 2017-12-21 16:08 UTC Modified: 2017-12-21 16:18 UTC
From: greg at girty dot net Assigned:
Status: Duplicate Package: SPL related
PHP Version: 7.1.12 OS: OSX, linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: greg at girty dot net
New email:
PHP Version: OS:

 

 [2017-12-21 16:08 UTC] greg at girty dot net
Description:
------------
The expected behaviour of RecursiveArrayIterator is that only leaf nodes will be iterated, but if an array is contained by reference, it is not traversed, instead it is returned by next().

Explicit use of RecursiveIteratorIterator::LEAVES_ONLY has no affect.

Submitter has tested this in OSX and Debian Linux, others likely affected.
HHVM gives the expected result, see https://3v4l.org/up3me 


Test script:
---------------
function flatten(array $nestedArraysAndStrings){
    $flat=[];
    $iter = new RecursiveIteratorIterator(
        new RecursiveArrayIterator($nestedArraysAndStrings));
    foreach($iter as $leaf){ $flat[] = $leaf; }
    return join(NULL, $flat);
}

$noRefs = [[[['some']]],[' nested ']," items \n"];

$withRefs = []+$noRefs;
$wat = $noRefs[0];
$withRefs[0] = &$wat;

echo flatten($noRefs);
echo flatten($withRefs);

Expected result:
----------------
some nested  items n
Notice: Array to string conversion in /in/up3me on line 8
Array nested  items n

Actual result:
--------------
some nested  items 
some nested  items 

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2017-12-21 16:12 UTC] greg at girty dot net
-Status: Open +Status: Closed -Type: Bug +Type: Documentation Problem
 [2017-12-21 16:12 UTC] greg at girty dot net
mixed expected and actual results, closing and resubmitting a corrected version
 [2017-12-21 16:18 UTC] requinix@php.net
-Status: Closed +Status: Duplicate -Type: Documentation Problem +Type: Bug
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Mar 29 07:01:28 2024 UTC