diff options
author | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2017-08-28 16:14:42 +0300 |
---|---|---|
committer | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2017-08-28 16:17:05 +0300 |
commit | 4a0a46b4cba01e870638abf095a47cb429e9c756 (patch) | |
tree | 98a423aac0ae4b658c2b0714534782e339019b5b /redis_array.c | |
parent | e5660be4c62d8afbae1fd2305e674f7711926098 (diff) |
Check number of elements in incoming array-argument
Diffstat (limited to 'redis_array.c')
-rw-r--r-- | redis_array.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/redis_array.c b/redis_array.c index ead1da2a..73dad311 100644 --- a/redis_array.c +++ b/redis_array.c @@ -394,7 +394,9 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i zend_bool b_write_cmd = 0; h_args = Z_ARRVAL_P(z_args); - argc = zend_hash_num_elements(h_args); + if ((argc = zend_hash_num_elements(h_args)) == 0) { + RETURN_FALSE; + } if(ra->z_multi_exec) { redis_inst = ra->z_multi_exec; /* we already have the instance */ @@ -935,7 +937,9 @@ PHP_METHOD(RedisArray, mget) /* init data structures */ h_keys = Z_ARRVAL_P(z_keys); - argc = zend_hash_num_elements(h_keys); + if ((argc = zend_hash_num_elements(h_keys)) == 0) { + RETURN_FALSE; + } argv = emalloc(argc * sizeof(zval*)); pos = emalloc(argc * sizeof(int)); @@ -1087,7 +1091,9 @@ PHP_METHOD(RedisArray, mset) /* init data structures */ h_keys = Z_ARRVAL_P(z_keys); - argc = zend_hash_num_elements(h_keys); + if ((argc = zend_hash_num_elements(h_keys)) == 0) { + RETURN_FALSE; + } argv = emalloc(argc * sizeof(zval*)); pos = emalloc(argc * sizeof(int)); keys = emalloc(argc * sizeof(char*)); @@ -1234,7 +1240,11 @@ PHP_METHOD(RedisArray, del) /* init data structures */ h_keys = Z_ARRVAL(z_keys); - argc = zend_hash_num_elements(h_keys); + if ((argc = zend_hash_num_elements(h_keys)) == 0) { + if (free_zkeys) zval_dtor(&z_keys); + efree(z_args); + RETURN_FALSE; + } argv = emalloc(argc * sizeof(zval*)); pos = emalloc(argc * sizeof(int)); |