]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth: Handle the extra single-row result set of MySQL stored procedures 9444/head
authorChris Hofstaedtler <chris.hofstaedtler@deduktiva.com>
Fri, 4 Sep 2020 08:20:36 +0000 (10:20 +0200)
committerChris Hofstaedtler <chris.hofstaedtler@deduktiva.com>
Fri, 4 Sep 2020 08:20:36 +0000 (10:20 +0200)
Backport of #9423, master commit f8289e595a8dc1b8c9738833ffa3d5a98b711268.

modules/gmysqlbackend/smysql.cc

index 152c987739907f72f7ae1b6c80ba2c72e5f42b4c..0687cec7ebadfe4a9ee2ef43f072d39d5addad52 100644 (file)
@@ -301,7 +301,10 @@ public:
         d_resnum = mysql_stmt_num_rows(d_stmt);
         // XXX: For some reason mysql_stmt_result_metadata returns NULL here, so we cannot
         // ensure row field count matches first result set.
-        if (d_resnum > 0) { // ignore empty result set
+        // We need to check the field count as stored procedure return the final values of OUT and INOUT parameters
+        // as an extra single-row result set following any result sets produced by the procedure itself.
+        // mysql_stmt_field_count() will return 0 for those.
+        if (mysql_stmt_field_count(d_stmt) > 0 && d_resnum > 0) { // ignore empty result set
           if (d_res_bind != nullptr && mysql_stmt_bind_result(d_stmt, d_res_bind) != 0) {
             string error(mysql_stmt_error(d_stmt));
             releaseStatement();