Skip to content

Commit e672f40

Browse files
committed
Duplicate incoming params via ZVAL_ZVAL in ra_forward_call
1 parent 4452f68 commit e672f40

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

redis_array.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)