Skip to content

Commit

Permalink
MDEV-33283: Binlog Checksum is Zeroed by Zlib if Part of Event Data i…
Browse files Browse the repository at this point in the history
…s Empty

An existing binlog checksum can be overridden to 0 if writing a NULL
payload when using Zlib for the computation. That is, calling into
Zlib's crc32 with empty data initializes an incremental CRC
computation to 0.

This patch changes the Log_event_writer::write_data() to exit
immediately if there is nothing to write, thereby bypassing the
checksum computation. This follows the pattern of
Log_event_writer::encrypt_and_write(), which also exits immediately
if there is no data to write.

Reviewed By:
============
Andrei Elkin <andrei.elkin@mariadb.com>
  • Loading branch information
bnestere committed Jan 22, 2024
1 parent 7573fe8 commit 207c857
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions sql/log_event_server.cc
Expand Up @@ -916,6 +916,10 @@ int Log_event_writer::write_header(uchar *pos, size_t len)
int Log_event_writer::write_data(const uchar *pos, size_t len)
{
DBUG_ENTER("Log_event_writer::write_data");

if (!len)
DBUG_RETURN(0);

if (checksum_len)
crc= my_checksum(crc, pos, len);

Expand Down

0 comments on commit 207c857

Please sign in to comment.