From 43a99886e94566e5a5edab038486d47c34857223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Thu, 19 Apr 2018 08:44:05 +0300 Subject: [PATCH] Fix SESSION_TRACK_SCHEMA tracking The SESSION_TRACK_SCHEMA tracking capability handling assumed an encoding integer in the data. This value does not exist for the data returned by schema change or session state tracking. --- server/modules/protocol/MySQL/mysql_common.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server/modules/protocol/MySQL/mysql_common.cc b/server/modules/protocol/MySQL/mysql_common.cc index 0ab66f652..11c1c8172 100644 --- a/server/modules/protocol/MySQL/mysql_common.cc +++ b/server/modules/protocol/MySQL/mysql_common.cc @@ -1806,7 +1806,9 @@ void mxs_mysql_parse_ok_packet(GWBUF *buff, size_t packet_offset, size_t packet_ if (server_status & SERVER_SESSION_STATE_CHANGED) { - mxs_leint_consume(&ptr); // total SERVER_SESSION_STATE_CHANGED length + ss_debug(uint64_t data_size = )mxs_leint_consume(&ptr); // total SERVER_SESSION_STATE_CHANGED length + ss_dassert(data_size == packet_len - (ptr - local_buf)); + while (ptr < (local_buf + packet_len)) { enum_session_state_type type = @@ -1818,6 +1820,9 @@ void mxs_mysql_parse_ok_packet(GWBUF *buff, size_t packet_offset, size_t packet_ { case SESSION_TRACK_STATE_CHANGE: case SESSION_TRACK_SCHEMA: + size = mxs_leint_consume(&ptr); // Length of the overall entity. + ptr += size; + break; case SESSION_TRACK_GTIDS: mxs_leint_consume(&ptr); // Length of the overall entity. mxs_leint_consume(&ptr); // encoding specification