From cb253b8687092960287c333962d56771f6ad9db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 30 Oct 2020 13:07:42 +0200 Subject: [PATCH] MDEV-22387: Static_binary_string::q_append() invokes memcpy on NULL Invoking memcpy() on a NULL pointer is undefined behaviour (even if the length is 0) and gives the compiler permission to assume that the pointer is nonnull. Recent versions of GCC (starting with version 8) are more aggressively optimizing away checks for NULL pointers. This undefined behaviour would cause a SIGSEGV in the test main.func_encrypt on an optimized debug build on GCC 10.2.0. --- sql/sql_string.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/sql_string.h b/sql/sql_string.h index 85c3bbd6044..0098ad15cb6 100644 --- a/sql/sql_string.h +++ b/sql/sql_string.h @@ -313,7 +313,8 @@ public: } void q_append(const char *data, size_t data_len) { - memcpy(Ptr + str_length, data, data_len); + if (data_len) + memcpy(Ptr + str_length, data, data_len); DBUG_ASSERT(str_length <= UINT_MAX32 - data_len); str_length += (uint)data_len; }