From 06f15b8cb977e34acd167ab877215ee9f4fbeeaf Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Fri, 3 Apr 2020 16:53:50 +0200 Subject: [PATCH] Add compression buffer size validation --- core-writer/src/ZmqRecvModule.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/core-writer/src/ZmqRecvModule.cpp b/core-writer/src/ZmqRecvModule.cpp index 5df0e10..8402929 100644 --- a/core-writer/src/ZmqRecvModule.cpp +++ b/core-writer/src/ZmqRecvModule.cpp @@ -132,14 +132,30 @@ void ZmqRecvModule::receive_thread(const string& connect_address) char* buffer = ring_buffer_.reserve(frame_metadata); // TODO: Add flag to disable compression. + // TODO: Cache results no to calculate this every time. { - // TODO: Cache results no to calculate this every time. + size_t n_elements = + frame_metadata->frame_shape[0] * + frame_metadata->frame_shape[1]; + size_t max_buffer_size = compression::get_bitshuffle_max_buffer_size( - frame_metadata->frame_bytes_size, 1); + n_elements, + frame_metadata->frame_bytes_size/n_elements); if (max_buffer_size > ring_buffer_.get_slot_size()) { - //TODO: Throw error if not large enough. + stringstream err_msg; + + using namespace date; + using namespace chrono; + err_msg << "[" << system_clock::now() << "]"; + err_msg << "[ZmqRecvModule::receive_thread]"; + err_msg << " RingBuffer slot size "; + err_msg << ring_buffer_.get_slot_size(); + err_msg << " smaller than max_buffer_size "; + err_msg << max_buffer_size << endl; + + throw runtime_error(err_msg.str()); } }