Add patch for 'libmariadbclient' fixing 'mysql_stmt_store_result' error handling

If 'mysql_stmt_store_result' fails with an error, it currently fails to
update the internal state machine for 'stmt', announcing that the fetch
operation has completed.
pull/4016/head
Javier Jaramago Fernández 4 years ago
parent a5574233a1
commit 68f9c63cea

1
deps/Makefile vendored

@ -230,6 +230,7 @@ endif
cd mariadb-client-library/mariadb_client && patch -p0 < ../client_deprecate_eof.patch
cd mariadb-client-library/mariadb_client && patch -p0 < ../cr_new_stmt_metadata_removal.patch
cd mariadb-client-library/mariadb_client && patch -p0 < ../ps_buffer_stmt_read_all_rows.patch
cd mariadb-client-library/mariadb_client && patch -p0 < ../mariadb_stmt_store_result_err.patch
ifeq ($(WITHASAN),1)
cd mariadb-client-library/mariadb_client && patch -p0 < ../mariadb_asan.patch
endif

@ -0,0 +1,14 @@
diff --git libmariadb/mariadb_stmt.c libmariadb/mariadb_stmt.c
index ba1617b..1c8d2e6 100644
--- libmariadb/mariadb_stmt.c
+++ libmariadb/mariadb_stmt.c
@@ -1838,6 +1838,9 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
stmt->result.data= NULL;
stmt->result.rows= 0;
stmt->mysql->status= MYSQL_STATUS_READY;
+ /* In case of error, stmt internal state needs to be reset. Otherwise state machine could be left in an
+ inconsistent state and further calls to 'mysql_stmt_execute' will halt. */
+ stmt->state= MYSQL_STMT_FETCH_DONE;
return(1);
}
Loading…
Cancel
Save