From 54931f525908c3f56ec7a08b6f6cc5ad2fd62518 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 10 Aug 2005 08:22:01 +0000 Subject: [PATCH] Fixed bug #33940 (array_map() fails to pass by reference when called recursively) --- NEWS | 2 + ext/standard/array.c | 1 + ext/standard/tests/array/bug33940.phpt | 62 ++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100755 ext/standard/tests/array/bug33940.phpt diff --git a/NEWS b/NEWS index f88238a429c..300e913aab3 100644 --- a/NEWS +++ b/NEWS @@ -19,6 +19,8 @@ PHP NEWS (Jani) - Fixed bug #33958 (duplicate cookies and magic_quotes=off may cause a crash). (Ilia) +- Fixed bug #33940 (array_map() fails to pass by reference when called + recursively). (Dmitry) - Fixed bug #33917 (number_format() output with > 1 char separators). (Jani) - Fixed bug #33904 (input array keys being escaped when magic quotes is off). (Ilia) diff --git a/ext/standard/array.c b/ext/standard/array.c index 67598e8d662..e34c915e2f6 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -4252,6 +4252,7 @@ PHP_FUNCTION(array_map) efree(array_pos); return; } + SEPARATE_ZVAL_IF_NOT_REF(pargs[i]); args[i] = *pargs[i]; array_len[i] = zend_hash_num_elements(Z_ARRVAL_PP(pargs[i])); if (array_len[i] > maxlen) { diff --git a/ext/standard/tests/array/bug33940.phpt b/ext/standard/tests/array/bug33940.phpt new file mode 100755 index 00000000000..f5727297c65 --- /dev/null +++ b/ext/standard/tests/array/bug33940.phpt @@ -0,0 +1,62 @@ +--TEST-- +Bug #33940 array_map() fails to pass by reference when called recursively +--INI-- +error_reporting=4095 +--FILE-- + +--EXPECT-- +Array: Array +( + [0] => Array + ( + [0] => 0 + ) + + [1] => 0 +) +Return: Array +( + [0] => Array + ( + [0] => 2 + ) + + [1] => 2 +) +Array: Array +( + [0] => Array + ( + [0] => 1 + ) + + [1] => 1 +) +Return: Array +( + [0] => Array + ( + [0] => 2 + ) + + [1] => 2 +)