@@ -1084,8 +1084,12 @@ PHP_FUNCTION(implode)
10841084
10851085ZEND_FRAMELESS_FUNCTION (implode , 1 )
10861086{
1087+ zval arg1_tmp ;
10871088 zval * pieces ;
10881089
1090+ ZVAL_COPY_DEREF (& arg1_tmp , arg1 );
1091+ arg1 = & arg1_tmp ;
1092+
10891093 /* Manual parsing for more accurate error message. */
10901094 if (!zend_parse_arg_array (arg1 , & pieces , /* null_check */ false, /* or_object */ false)) { \
10911095 zend_type_error (
@@ -1101,14 +1105,22 @@ ZEND_FRAMELESS_FUNCTION(implode, 1)
11011105 php_implode (str , Z_ARR_P (pieces ), return_value );
11021106
11031107flf_clean :;
1108+ zval_ptr_dtor (& arg1_tmp );
11041109}
11051110
11061111ZEND_FRAMELESS_FUNCTION (implode , 2 )
11071112{
1113+ zval arg1_tmp ;
1114+ zval arg2_tmp ;
11081115 zval str_tmp ;
11091116 zend_string * str ;
11101117 zval * pieces ;
11111118
1119+ ZVAL_COPY_DEREF (& arg1_tmp , arg1 );
1120+ arg1 = & arg1_tmp ;
1121+ ZVAL_COPY_DEREF (& arg2_tmp , arg2 );
1122+ arg2 = & arg2_tmp ;
1123+
11121124 Z_FLF_PARAM_STR (1 , str , str_tmp );
11131125 Z_FLF_PARAM_ARRAY_OR_NULL (2 , pieces );
11141126
@@ -1125,6 +1137,8 @@ ZEND_FRAMELESS_FUNCTION(implode, 2)
11251137
11261138flf_clean :;
11271139 Z_FLF_PARAM_FREE_STR (1 , str_tmp );
1140+ zval_ptr_dtor (& arg2_tmp );
1141+ zval_ptr_dtor (& arg1_tmp );
11281142}
11291143
11301144#define STRTOK_TABLE (p ) BG(strtok_table)[(unsigned char) *p]
0 commit comments