From a76d11b3a1b8951bfbd320da6b8cd060a4c3012d Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 10 Apr 2023 11:50:30 +0200 Subject: [PATCH] DATV demod: leansdr: fix possible segfaults --- plugins/channelrx/demoddatv/leansdr/dsp.h | 7 +++++++ plugins/channelrx/demoddatv/leansdr/framework.h | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/plugins/channelrx/demoddatv/leansdr/dsp.h b/plugins/channelrx/demoddatv/leansdr/dsp.h index db7c30200..b8d5f7196 100644 --- a/plugins/channelrx/demoddatv/leansdr/dsp.h +++ b/plugins/channelrx/demoddatv/leansdr/dsp.h @@ -131,6 +131,13 @@ struct cfft_engine { int r = bitrev[i]; + if ((r < 0) || (r >= n)) // corruption: init again and exit + { + fprintf(stderr, "cfft_engine::inplace: corruption detected\n"); + init(n); + return; + } + if (r < i) { std::complex tmp = data[i]; diff --git a/plugins/channelrx/demoddatv/leansdr/framework.h b/plugins/channelrx/demoddatv/leansdr/framework.h index d0193ef32..761046d2e 100644 --- a/plugins/channelrx/demoddatv/leansdr/framework.h +++ b/plugins/channelrx/demoddatv/leansdr/framework.h @@ -357,8 +357,10 @@ struct pipewriter void written(unsigned long n) { - if (buf.wr + n > buf.end) { + if (buf.wr + n > buf.end) + { fprintf(stderr, "pipewriter::written: bug: overflow to %s\n", buf.name); + return; } buf.wr += n;