summaryrefslogtreecommitdiff
path: root/ext/mysqlnd/mysqlnd_result.c
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-01-13 11:47:40 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2020-01-13 13:21:45 +0100
commit1752393bb4013ca94d45da5a4d43997a73ae9750 (patch)
treeebbccacc3ede0095f204ed70f4d0ed4b8086a1dd /ext/mysqlnd/mysqlnd_result.c
parentf6dea348318d78028a45c2f072a9170a60af4300 (diff)
downloadphp-git-1752393bb4013ca94d45da5a4d43997a73ae9750.tar.gz
Fix #79084: mysqlnd may fetch wrong column indexes with MYSQLI_BOTH
Column names can be numeric strings, so we have to make sure to insert the column values with the appropriate numeric keys, instead of adding them.
Diffstat (limited to 'ext/mysqlnd/mysqlnd_result.c')
-rw-r--r--ext/mysqlnd/mysqlnd_result.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c
index 783fd2cec1..10b4d09905 100644
--- a/ext/mysqlnd/mysqlnd_result.c
+++ b/ext/mysqlnd/mysqlnd_result.c
@@ -842,8 +842,9 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void
const size_t len = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0;
if (flags & MYSQLND_FETCH_NUM) {
- Z_TRY_ADDREF_P(data);
- zend_hash_next_index_insert(row_ht, data);
+ if (zend_hash_index_add(row_ht, i, data) != NULL) {
+ Z_TRY_ADDREF_P(data);
+ }
}
if (flags & MYSQLND_FETCH_ASSOC) {
/* zend_hash_quick_update needs length + trailing zero */
@@ -1099,8 +1100,9 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)(MYSQLND_RES * result, vo
set->lengths[i] = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0;
if (flags & MYSQLND_FETCH_NUM) {
- Z_TRY_ADDREF_P(data);
- zend_hash_next_index_insert(Z_ARRVAL_P(row), data);
+ if (zend_hash_index_add(Z_ARRVAL_P(row), i, data) != NULL) {
+ Z_TRY_ADDREF_P(data);
+ }
}
if (flags & MYSQLND_FETCH_ASSOC) {
/* zend_hash_quick_update needs length + trailing zero */
@@ -1195,8 +1197,9 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void
set->lengths[i] = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0;
if (flags & MYSQLND_FETCH_NUM) {
- Z_TRY_ADDREF_P(data);
- zend_hash_next_index_insert(Z_ARRVAL_P(row), data);
+ if (zend_hash_index_add(Z_ARRVAL_P(row), i, data)) {
+ Z_TRY_ADDREF_P(data);
+ }
}
if (flags & MYSQLND_FETCH_ASSOC) {
/* zend_hash_quick_update needs length + trailing zero */