From c6a6a5f21b6e01c7427f677cffbd011340aa0a15 Mon Sep 17 00:00:00 2001 From: Alexey Rybalchenko Date: Fri, 9 Apr 2021 12:27:16 +0200 Subject: [PATCH] Check transport type of msg and corresponding region --- fairmq/shmem/Message.h | 7 ++++++- fairmq/zeromq/Message.h | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/fairmq/shmem/Message.h b/fairmq/shmem/Message.h index a59818f3..ed5cf15b 100644 --- a/fairmq/shmem/Message.h +++ b/fairmq/shmem/Message.h @@ -109,12 +109,17 @@ class Message final : public fair::mq::Message , fRegionPtr(nullptr) , fLocalPtr(static_cast(data)) { + if (region->GetType() != GetType()) { + LOG(error) << "region type (" << region->GetType() << ") does not match message type (" << GetType() << ")"; + throw TransportError(tools::ToString("region type (", region->GetType(), ") does not match message type (", GetType(), ")")); + } + if (reinterpret_cast(data) >= reinterpret_cast(region->GetData()) && reinterpret_cast(data) <= reinterpret_cast(region->GetData()) + region->GetSize()) { fMeta.fHandle = (boost::interprocess::managed_shared_memory::handle_t)(reinterpret_cast(data) - reinterpret_cast(region->GetData())); } else { LOG(error) << "trying to create region message with data from outside the region"; - throw std::runtime_error("trying to create region message with data from outside the region"); + throw TransportError("trying to create region message with data from outside the region"); } fManager.IncrementMsgCounter(); } diff --git a/fairmq/zeromq/Message.h b/fairmq/zeromq/Message.h index f0e3953c..7510a703 100644 --- a/fairmq/zeromq/Message.h +++ b/fairmq/zeromq/Message.h @@ -109,6 +109,11 @@ class Message final : public fair::mq::Message , fAlignment(0) , fMsg(std::make_unique()) { + if (region->GetType() != GetType()) { + LOG(error) << "region type (" << region->GetType() << ") does not match message type (" << GetType() << ")"; + throw TransportError(tools::ToString("region type (", region->GetType(), ") does not match message type (", GetType(), ")")); + } + // FIXME: make this zero-copy: // simply taking over the provided buffer can casue premature delete, since region could be // destroyed before the message is sent out. Needs lifetime extension for the ZMQ region.