From 44c8d84908e9d697bbcea55d6ebcd5f2250c4727 Mon Sep 17 00:00:00 2001 From: Andrei Elkin Date: Fri, 15 May 2020 21:49:57 +0300 Subject: MDEV-22520 Assertion `gathered_length == thd->lex->comment.length` failed in binlog_defragment The assert was caused by early cleanup of a user variable participant in BINLOG @var,@var where it plays twice. That was unexpected by the base code to clear its value prematurely. Fixed with relocating the user var destruction after operations with its value is over. --- sql/sql_binlog.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'sql/sql_binlog.cc') diff --git a/sql/sql_binlog.cc b/sql/sql_binlog.cc index 1105c9a55ec..b8d4525b5d7 100644 --- a/sql/sql_binlog.cc +++ b/sql/sql_binlog.cc @@ -78,8 +78,9 @@ int binlog_defragment(THD *thd) memcpy(thd->lex->comment.str + gathered_length, entry[k]->value, entry[k]->length); gathered_length += entry[k]->length; - update_hash(entry[k], true, NULL, 0, STRING_RESULT, &my_charset_bin, 0); } + for (uint k=0; k < 2; k++) + update_hash(entry[k], true, NULL, 0, STRING_RESULT, &my_charset_bin, 0); DBUG_ASSERT(gathered_length == thd->lex->comment.length); -- cgit v1.2.1