From d272377f897f0da3dc6d69f0c9050fd9ec8261bd Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Mon, 22 Mar 2021 09:28:46 +0100 Subject: [PATCH] Fix for CONC-535: disabled checksum ignored in events QUERY_EVENT and ANNOTATE_ROWS_EVENT don't check if the crc32 checksum option is disabled and strip always 4 bytes from protocol buffer. Kudos to Ruslan Altynbaev for reporting and providing this small fix. --- libmariadb/mariadb_rpl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libmariadb/mariadb_rpl.c b/libmariadb/mariadb_rpl.c index 6a7e0cf1..9bb1916a 100644 --- a/libmariadb/mariadb_rpl.c +++ b/libmariadb/mariadb_rpl.c @@ -235,7 +235,7 @@ MARIADB_RPL_EVENT * STDCALL mariadb_rpl_fetch(MARIADB_RPL *rpl, MARIADB_RPL_EVEN ev+= db_len + 1; /* zero terminated */ /* calculate statement size: buffer + buffer_size - current_ofs (ev) - crc_size */ - len= (size_t)(rpl->buffer + rpl->buffer_size - ev - 4); + len= (size_t)(rpl->buffer + rpl->buffer_size - ev - (rpl->use_checksum ? 4 : 0)); if (rpl_alloc_string(rpl_event, &rpl_event->event.query.statement, ev, len)) goto mem_error; break; @@ -302,7 +302,7 @@ MARIADB_RPL_EVENT * STDCALL mariadb_rpl_fetch(MARIADB_RPL *rpl, MARIADB_RPL_EVEN rpl_event->event.encryption.nonce= (char *)ev; break; case ANNOTATE_ROWS_EVENT: - len= (uint32)(rpl->buffer + rpl->buffer_size - (unsigned char *)ev - 4); + len= (uint32)(rpl->buffer + rpl->buffer_size - (unsigned char *)ev - (rpl->use_checksum ? 4 : 0)); if (rpl_alloc_string(rpl_event, &rpl_event->event.annotate_rows.statement, ev, len)) goto mem_error; break;