From 641841012f15ed63943718d8a155780a7f2a9f6c Mon Sep 17 00:00:00 2001 From: michael-grunder Date: Tue, 6 Aug 2013 14:17:54 -0700 Subject: Make sure RedisArray::mget returns an array Add a check in mget to make sure that the forwarded call is returning with an array, and not NULL or something else. Addresses issue #350 --- redis_array.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'redis_array.c') diff --git a/redis_array.c b/redis_array.c index 4d5f0a97..31f77278 100644 --- a/redis_array.c +++ b/redis_array.c @@ -849,7 +849,6 @@ PHP_METHOD(RedisArray, mget) /* calls */ for(n = 0; n < ra->count; ++n) { /* for each node */ - /* copy args for MGET call on node. */ MAKE_STD_ZVAL(z_argarray); array_init(z_argarray); @@ -873,7 +872,21 @@ PHP_METHOD(RedisArray, mget) zval_ptr_dtor(&z_argarray); for(i = 0, j = 0; i < argc; ++i) { - if(pos[i] != n) continue; + /* Error out if we didn't get a proper response */ + if(Z_TYPE_P(z_ret) != IS_ARRAY) { + /* cleanup */ + zval_dtor(z_ret); + efree(z_ret); + zval_ptr_dtor(&z_tmp_array); + efree(pos); + efree(redis_instances); + efree(argc_each); + + /* failure */ + RETURN_FALSE; + } + + if(pos[i] != n) continue; zend_hash_quick_find(Z_ARRVAL_P(z_ret), NULL, 0, j, (void**)&z_cur); j++; @@ -886,7 +899,6 @@ PHP_METHOD(RedisArray, mget) } zval_dtor(z_ret); efree(z_ret); - } /* copy temp array in the right order to return_value */ -- cgit v1.2.3