From 90677eb58ca1eec2bc196d0d447f086c327f4296 Mon Sep 17 00:00:00 2001 From: Daniil Kovalev Date: Sun, 9 May 2021 15:43:14 +0300 Subject: [PATCH] Fix UB in v4raw_ref::operator== Behaviour of memcmp is undefined if any of pointers passed to it is null. See https://en.cppreference.com/w/c/string/byte/memcmp for details. UB was detected on test MSGPACK_V4RAW_REF.pack_unpack_fix_l with UB-sanitizer. --- include/msgpack/v1/adaptor/v4raw.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/msgpack/v1/adaptor/v4raw.hpp b/include/msgpack/v1/adaptor/v4raw.hpp index f03f4a06..ae660c61 100644 --- a/include/msgpack/v1/adaptor/v4raw.hpp +++ b/include/msgpack/v1/adaptor/v4raw.hpp @@ -33,7 +33,7 @@ struct v4raw_ref { bool operator== (const v4raw_ref& x) const { - return size == x.size && std::memcmp(ptr, x.ptr, size) == 0; + return size == x.size && (size == 0 || std::memcmp(ptr, x.ptr, size) == 0); } bool operator!= (const v4raw_ref& x) const