@@ -374,12 +374,12 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
374374
375375 /* pass call through */
376376 ZVAL_STRINGL (& z_fun , cmd , cmd_len ); /* method name */
377- z_callargs = ecalloc (argc + 1 , sizeof (zval ));
377+ z_callargs = ecalloc (argc , sizeof (zval ));
378378
379379 /* copy args to array */
380380 i = 0 ;
381381 ZEND_HASH_FOREACH_VAL (h_args , zp_tmp ) {
382- z_callargs [i ] = * zp_tmp ;
382+ ZVAL_ZVAL ( & z_callargs [i ], zp_tmp , 1 , 0 ) ;
383383 i ++ ;
384384 } ZEND_HASH_FOREACH_END ();
385385
@@ -388,6 +388,9 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
388388 call_user_function (& redis_ce -> function_table , ra -> z_multi_exec , & z_fun , return_value , argc , z_callargs );
389389 zval_dtor (return_value );
390390 zval_dtor (& z_fun );
391+ for (i = 0 ; i < argc ; ++ i ) {
392+ zval_dtor (& z_callargs [i ]);
393+ }
391394 efree (z_callargs );
392395 RETURN_ZVAL (getThis (), 1 , 0 );
393396 }
@@ -430,6 +433,9 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
430433
431434 /* cleanup */
432435 zval_dtor (& z_fun );
436+ for (i = 0 ; i < argc ; ++ i ) {
437+ zval_dtor (& z_callargs [i ]);
438+ }
433439 efree (z_callargs );
434440}
435441
0 commit comments