summaryrefslogtreecommitdiff
path: root/sql/debug_sync.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2020-09-03 09:05:56 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2020-09-03 09:05:56 +0300
commit94a520ddbe39ae97de1135d98699cf2674e6b77e (patch)
tree051dc62fd84edc150754dd826830d467b45074d8 /sql/debug_sync.cc
parenta256070e7d94fdd1d63a4823c638ff5c76ca9c73 (diff)
downloadmariadb-git-94a520ddbe39ae97de1135d98699cf2674e6b77e.tar.gz
MDEV-22387: Do not pass null pointer to some memcpy()
Passing a null pointer to a nonnull argument is not only undefined behaviour, but it also grants the compiler the permission to optimize away further checks whether the pointer is null. GCC -O2 at least starting with version 8 may do that, potentially causing SIGSEGV. These problems were caught in a WITH_UBSAN=ON build with the Bug#7024 test in main.view.
Diffstat (limited to 'sql/debug_sync.cc')
-rw-r--r--sql/debug_sync.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/sql/debug_sync.cc b/sql/debug_sync.cc
index 591ce5800a8..79f3a241907 100644
--- a/sql/debug_sync.cc
+++ b/sql/debug_sync.cc
@@ -1,4 +1,5 @@
/* Copyright (c) 2009, 2013, Oracle and/or its affiliates.
+ Copyright (c) 2013, 2020, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -319,7 +320,8 @@ static char *debug_sync_bmove_len(char *to, char *to_end,
DBUG_ASSERT(to_end);
DBUG_ASSERT(!length || from);
set_if_smaller(length, (size_t) (to_end - to));
- memcpy(to, from, length);
+ if (length)
+ memcpy(to, from, length);
return (to + length);
}