diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2019-03-22 13:07:00 +0100 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-03-22 13:07:00 +0100 |
| commit | 30ddfd49edbd8066cc0a18a557e3de30c2397d12 (patch) | |
| tree | 9f7cd90ad1ae69805bba7f760c7935012059511d /ext/mysqlnd/mysqlnd_result.c | |
| parent | 620a753185e575c8d48779764f376f6227b6e293 (diff) | |
| download | php-git-30ddfd49edbd8066cc0a18a557e3de30c2397d12.tar.gz | |
Fixed bug #77773
Diffstat (limited to 'ext/mysqlnd/mysqlnd_result.c')
| -rw-r--r-- | ext/mysqlnd/mysqlnd_result.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c index 5e3b86e12d..f0852af360 100644 --- a/ext/mysqlnd/mysqlnd_result.c +++ b/ext/mysqlnd/mysqlnd_result.c @@ -781,6 +781,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void MYSQLND_PACKET_ROW *row_packet = result->unbuf->row_packet; const MYSQLND_RES_METADATA * const meta = result->meta; MYSQLND_CONN_DATA * const conn = result->conn; + void *checkpoint; DBG_ENTER("mysqlnd_result_unbuffered::fetch_row"); @@ -800,6 +801,9 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void /* Let the row packet fill our buffer and skip additional mnd_malloc + memcpy */ row_packet->skip_extraction = row? FALSE:TRUE; + checkpoint = result->memory_pool->checkpoint; + mysqlnd_mempool_save_state(result->memory_pool); + /* If we skip rows (row == NULL) we have to result->m.unbuffered_free_last_data() before it. The function returns always true. @@ -824,6 +828,8 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void conn->options->int_and_float_native, conn->stats); if (PASS != rc) { + mysqlnd_mempool_restore_state(result->memory_pool); + result->memory_pool->checkpoint = checkpoint; DBG_RETURN(FAIL); } { @@ -894,6 +900,9 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void result->unbuf->m.free_last_data(result->unbuf, conn->stats); } + mysqlnd_mempool_restore_state(result->memory_pool); + result->memory_pool->checkpoint = checkpoint; + DBG_INF_FMT("ret=%s fetched=%u", ret == PASS? "PASS":"FAIL", *fetched_anything); DBG_RETURN(PASS); } |
