From: Remi Gacogne Date: Mon, 31 Aug 2020 08:25:04 +0000 (+0200) Subject: [PATCH] auth: Handle the extra single-row result set of MySQL stored procedures X-Git-Tag: archive/raspbian/4.3.0-5+rpi1^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=0850c2bbdc2c838077f30d69a7f250898f51a395;p=pdns.git [PATCH] auth: Handle the extra single-row result set of MySQL stored procedures Gbp-Pq: Name mysqlsp.patch --- diff --git a/modules/gmysqlbackend/smysql.cc b/modules/gmysqlbackend/smysql.cc index 7408742..23c4841 100644 --- a/modules/gmysqlbackend/smysql.cc +++ b/modules/gmysqlbackend/smysql.cc @@ -303,7 +303,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 && (err = mysql_stmt_bind_result(d_stmt, d_res_bind))) { string error(mysql_stmt_error(d_stmt)); releaseStatement();