File tree Expand file tree Collapse file tree 2 files changed +33
-5
lines changed Expand file tree Collapse file tree 2 files changed +33
-5
lines changed Original file line number Diff line number Diff line change @@ -1998,7 +1998,6 @@ SPL_METHOD(CallbackFilterIterator, accept)
1998
1998
zend_fcall_info * fci = & intern -> u .cbfilter -> fci ;
1999
1999
zend_fcall_info_cache * fcc = & intern -> u .cbfilter -> fcc ;
2000
2000
zval params [3 ];
2001
- zval result ;
2002
2001
2003
2002
if (zend_parse_parameters_none () == FAILURE ) {
2004
2003
return ;
@@ -2012,19 +2011,22 @@ SPL_METHOD(CallbackFilterIterator, accept)
2012
2011
ZVAL_COPY_VALUE (& params [1 ], & intern -> current .key );
2013
2012
ZVAL_COPY_VALUE (& params [2 ], & intern -> inner .zobject );
2014
2013
2015
- fci -> retval = & result ;
2014
+ fci -> retval = return_value ;
2016
2015
fci -> param_count = 3 ;
2017
2016
fci -> params = params ;
2018
2017
fci -> no_separation = 0 ;
2019
2018
2020
- if (zend_call_function (fci , fcc ) != SUCCESS || Z_TYPE ( result ) == IS_UNDEF ) {
2019
+ if (zend_call_function (fci , fcc ) != SUCCESS || Z_ISUNDEF_P ( return_value ) ) {
2021
2020
RETURN_FALSE ;
2022
2021
}
2022
+
2023
2023
if (EG (exception )) {
2024
- return ;
2024
+ RETURN_NULL () ;
2025
2025
}
2026
2026
2027
- RETURN_ZVAL (& result , 1 , 1 );
2027
+ /* zend_call_function may change args to IS_REF */
2028
+ ZVAL_COPY_VALUE (& intern -> current .data , & params [0 ]);
2029
+ ZVAL_COPY_VALUE (& intern -> current .key , & params [1 ]);
2028
2030
}
2029
2031
/* }}} */
2030
2032
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #72051 (The reference in CallbackFilterIterator doesn't work as expected)
3
+ --FILE--
4
+ <?php
5
+
6
+ $ data = [
7
+ [1 ,2 ]
8
+ ];
9
+
10
+ $ callbackTest = new CallbackFilterIterator (new ArrayIterator ($ data ), function (&$ current ) {
11
+ $ current ['message ' ] = 'Test message ' ;
12
+ return true ;
13
+ });
14
+
15
+ $ callbackTest ->rewind ();
16
+ $ data = $ callbackTest ->current ();
17
+ $ callbackTest ->next ();
18
+ print_r ($ data );
19
+ ?>
20
+ --EXPECT--
21
+ Array
22
+ (
23
+ [0] => 1
24
+ [1] => 2
25
+ [message] => Test message
26
+ )
You can’t perform that action at this time.
0 commit comments