From 78df0763bf26b1f034b5f7bf2b0abaef5377ec51 Mon Sep 17 00:00:00 2001 From: Christopher Kohlhoff Date: Sat, 2 Dec 2017 08:28:39 +1100 Subject: [PATCH] Don't call memcpy with length 0, to avoid passing null pointers. --- include/boost/asio/buffer.hpp | 3 ++- include/boost/asio/generic/detail/impl/endpoint.ipp | 3 ++- include/boost/asio/local/detail/impl/endpoint.ipp | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/boost/asio/buffer.hpp b/include/boost/asio/buffer.hpp index fbd4126d..2957e46b 100644 --- a/include/boost/asio/buffer.hpp +++ b/include/boost/asio/buffer.hpp @@ -1921,7 +1921,8 @@ inline std::size_t buffer_copy_1(const mutable_buffer& target, std::size_t target_size = target.size(); std::size_t source_size = source.size(); std::size_t n = target_size < source_size ? target_size : source_size; - memcpy(target.data(), source.data(), n); + if (n > 0) + memcpy(target.data(), source.data(), n); return n; } diff --git a/include/boost/asio/generic/detail/impl/endpoint.ipp b/include/boost/asio/generic/detail/impl/endpoint.ipp index 3c2da4a6..7fa67628 100644 --- a/include/boost/asio/generic/detail/impl/endpoint.ipp +++ b/include/boost/asio/generic/detail/impl/endpoint.ipp @@ -95,7 +95,8 @@ void endpoint::init(const void* sock_addr, using namespace std; // For memset and memcpy. memset(&data_.generic, 0, sizeof(boost::asio::detail::sockaddr_storage_type)); - memcpy(&data_.generic, sock_addr, sock_addr_size); + if (sock_addr_size > 0) + memcpy(&data_.generic, sock_addr, sock_addr_size); size_ = sock_addr_size; protocol_ = sock_protocol; diff --git a/include/boost/asio/local/detail/impl/endpoint.ipp b/include/boost/asio/local/detail/impl/endpoint.ipp index 4173a824..d668e8ba 100644 --- a/include/boost/asio/local/detail/impl/endpoint.ipp +++ b/include/boost/asio/local/detail/impl/endpoint.ipp @@ -109,7 +109,8 @@ void endpoint::init(const char* path_name, std::size_t path_length) using namespace std; // For memcpy. data_.local = boost::asio::detail::sockaddr_un_type(); data_.local.sun_family = AF_UNIX; - memcpy(data_.local.sun_path, path_name, path_length); + if (path_length > 0) + memcpy(data_.local.sun_path, path_name, path_length); path_length_ = path_length; // NUL-terminate normal path names. Names that start with a NUL are in the