From abad9d7299f98850a6f8d00489aeb6080f8d7aae Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 11 Dec 2016 14:32:10 +0100 Subject: [PATCH] SDRDaemoFEC plugin: fixed possible segfault --- plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.cpp | 5 +++++ plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.h | 1 + 2 files changed, 6 insertions(+) diff --git a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.cpp b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.cpp index c68d8e993..e89b62083 100644 --- a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.cpp +++ b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.cpp @@ -402,6 +402,11 @@ uint8_t *SDRdaemonFECBuffer::readData(int32_t length) m_nbReads++; + // SEGFAULT FIX: arbitratily truncate so that it does not exceed buffer length + if (length > framesSize) { + length = framesSize; + } + if (m_readIndex + length < m_framesNbBytes) // ends before buffer bound { m_readIndex += length; diff --git a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.h b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.h index 4c9814128..e52dc1f8b 100644 --- a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.h +++ b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.h @@ -69,6 +69,7 @@ public: }; static const int samplesPerBlock = (SDRDAEMONFEC_UDPSIZE - sizeof(Header)) / sizeof(Sample); + static const int framesSize = SDRDAEMONFEC_NBDECODERSLOTS * (SDRDAEMONFEC_NBORIGINALBLOCKS - 1) * (SDRDAEMONFEC_UDPSIZE - sizeof(Header)); struct ProtectedBlock {