From f91a86c46fbffb9c3ce947e2e636824c70f6556d Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Tue, 7 Sep 2021 16:18:22 -0400 Subject: [PATCH] Cortex: Bounds checks in AudioFilterNode::processBuffer. Processing more than framesRemaining leads to buffer overruns. --- src/apps/cortex/addons/common/AudioFilterNode.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/apps/cortex/addons/common/AudioFilterNode.cpp b/src/apps/cortex/addons/common/AudioFilterNode.cpp index 79a3a76b59..77443486ca 100644 --- a/src/apps/cortex/addons/common/AudioFilterNode.cpp +++ b/src/apps/cortex/addons/common/AudioFilterNode.cpp @@ -1498,6 +1498,9 @@ void AudioFilterNode::processBuffer( ASSERT(toProcess > 0); + if (toProcess > framesRemaining) + toProcess = framesRemaining; + uint32 processed = m_op->process( input, output, sourceOffset, destinationOffset, (uint32)toProcess, targetTime); if(processed < toProcess) { @@ -1506,10 +1509,7 @@ void AudioFilterNode::processBuffer( "*** AudioFilterNode::processBuffer(): insufficient frames filled\n")); } - if(toProcess > framesRemaining) - framesRemaining = 0; - else - framesRemaining -= toProcess; + framesRemaining -= toProcess; // advance target time targetTime = nextEventTime; // +++++ might this drift from the real frame offset?