diff options
author | Dmitry Stogov <dmitry@zend.com> | 2018-07-18 14:49:52 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2018-07-18 14:49:52 +0300 |
commit | e8a04b387e43d4be5babba9aae442f3abbd0e2d7 (patch) | |
tree | 1837176739d2b04cd854f40495d98fc5ccd22a71 | |
parent | 412dd75e057e773e3eeeaeb77a14da655cbd4779 (diff) | |
download | php-git-e8a04b387e43d4be5babba9aae442f3abbd0e2d7.tar.gz |
Allocate array of proper size
-rw-r--r-- | ext/mysqlnd/mysqlnd_result.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c index d9db4c3b28..38fe116686 100644 --- a/ext/mysqlnd/mysqlnd_result.c +++ b/ext/mysqlnd/mysqlnd_result.c @@ -1705,6 +1705,7 @@ MYSQLND_METHOD(mysqlnd_res, fetch_into)(MYSQLND_RES * result, const unsigned int enum_mysqlnd_extension extension ZEND_FILE_LINE_DC) { zend_bool fetched_anything; + unsigned int array_size; DBG_ENTER("mysqlnd_res::fetch_into"); @@ -1712,7 +1713,11 @@ MYSQLND_METHOD(mysqlnd_res, fetch_into)(MYSQLND_RES * result, const unsigned int Hint Zend how many elements we will have in the hash. Thus it won't extend and rehash the hash constantly. */ - array_init_size(return_value, mysqlnd_num_fields(result) * 2); + array_size = result->field_count; + if ((flags & (MYSQLND_FETCH_NUM|MYSQLND_FETCH_ASSOC)) == (MYSQLND_FETCH_NUM|MYSQLND_FETCH_ASSOC)) { + array_size *= 2; + } + array_init_size(return_value, array_size); if (FAIL == result->m.fetch_row(result, (void *)return_value, flags, &fetched_anything)) { php_error_docref(NULL, E_WARNING, "Error while reading a row"); zend_array_destroy(Z_ARR_P(return_value)); |