Bug #71241 [Nab->Opn]: array_replace_recursive sometimes mutates its parameters

From: Date: Tue, 26 Jan 2016 22:46:42 +0000
Subject: Bug #71241 [Nab->Opn]: array_replace_recursive sometimes mutates its parameters
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-198911@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=71241&edit=1

 ID:                 71241
 Updated by:         rasmus@php.net
 Reported by:        as@php.net
 Summary:            array_replace_recursive sometimes mutates its
                     parameters
-Status:             Not a bug
+Status:             Open
 Type:               Bug
 Package:            Variables related
 PHP Version:        7.0.1
 Block user comment: N
 Private report:     N

 New Comment:

Re-opened. This does seem like a real bug in array_merge_recursive()


Previous Comments:
------------------------------------------------------------------------
[2016-01-11 18:17:14] as@php.net

Thanks for checking it out laruence. In that case, is array_merge_recursive buggy? It
exhibits the old behavior: https://3v4l.org/NSa9S

There is also a related oddity illustrated here https://3v4l.org/sYutE which again only seems to affect
array_replace_recursive.

I can open separate bugs if that's easier to track, but I think it's all the same root
issue.

------------------------------------------------------------------------
[2015-12-30 03:01:15] laruence@php.net

close as not a bug.

------------------------------------------------------------------------
[2015-12-30 03:00:40] laruence@php.net

the new behavior is more correct, $arr1['k'] is a reference:

it behavior consistently with :

<?php
$one = [1];
$arr1 = ['k' => &$one];
$arr1['k'] = 2;

var_dump($one); //output 2

so, I think no bug here. 

thanks

------------------------------------------------------------------------
[2015-12-30 00:03:23] as@php.net

The following patch has been added/updated:

Patch Name: fix_array_replace_recursive_ref_mut
Revision:   1451433803
URL:        https://bugs.php.net/patch-display.php?bug=71241&patch=fix_array_replace_recursive_ref_mut&revision=1451433803

------------------------------------------------------------------------
[2015-12-30 00:03:02] as@php.net

Description:
------------
array_replace_recursive can sometimes mutate its params if references are nested within. This
appears to be new behavior in PHP7. It also affects PHPunit.

Test script and diff: https://3v4l.org/0sdbm

Patch attached.


Test script:
---------------
<?php

$one = [1];
$two = [42];

$arr1 = ['k' => &$one];
$arr2 = ['k' => &$two];
var_dump(current($one), current($two));
array_replace_recursive($arr1, $arr2);
var_dump(current($one), current($two));


Expected result:
----------------
int(1)
int(42)
int(1)
int(42)


Actual result:
--------------
int(1)
int(42)
int(42)
int(42)



------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=71241&edit=1


Thread (8 messages)

« previous php.bugs (#198911) next »