From 5d63bac30fbbcbfd69c05e3e36381225ef5d2614 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Tue, 9 May 2023 11:48:35 +0200 Subject: [PATCH] JFJochReceiver: add safety for overruninng the buffer --- receiver/JFJochReceiver.cpp | 3 +++ receiver/JFJochReceiver.h | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/receiver/JFJochReceiver.cpp b/receiver/JFJochReceiver.cpp index 4a39e20e..ffc30349 100644 --- a/receiver/JFJochReceiver.cpp +++ b/receiver/JFJochReceiver.cpp @@ -463,6 +463,9 @@ int64_t JFJochReceiver::FrameTransformationThread() { if (push_images_to_writer) { PrepareCBORImage(message, experiment, nullptr, 0); serializer.SerializeImage(message); + if (serializer.GetRemainingBuffer() < experiment.GetMaxCompressedSize()) + throw JFJochException(JFJochExceptionCategory::ArrayOutOfBounds, + "Not enough memory to save image"); size_t image_size = transformation.SaveCompressedImage(serializer.GetImageAppendLocation()); serializer.AppendImage(image_size); image_pusher.SendImage(const_cast(serializer.GetBuffer()), serializer.GetBufferSize(), diff --git a/receiver/JFJochReceiver.h b/receiver/JFJochReceiver.h index f4ee49dc..bf64238a 100644 --- a/receiver/JFJochReceiver.h +++ b/receiver/JFJochReceiver.h @@ -88,7 +88,8 @@ class JFJochReceiver { int64_t max_image_number_sent = 0; std::mutex max_image_number_sent_mutex; - const size_t serializer_buffer_size = experiment.GetMaxCompressedSize() + 1024*1024; // max compressed size + 1 MiB + const size_t serializer_buffer_size = experiment.GetMaxCompressedSize() + 1024*1024; + // max compressed size + 1 MiB reserve for spots and rad. integration results void PinThreadToDevice(uint16_t data_stream); void PrepareConversionOnCPU();