diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2020-01-13 11:47:40 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-01-13 13:21:45 +0100 |
commit | 1752393bb4013ca94d45da5a4d43997a73ae9750 (patch) | |
tree | ebbccacc3ede0095f204ed70f4d0ed4b8086a1dd /ext/mysqlnd/mysqlnd_result.c | |
parent | f6dea348318d78028a45c2f072a9170a60af4300 (diff) | |
download | php-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.c | 15 |
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 */ |