From 2169872ee8c99475c98a09ff2da12fe301d23cea Mon Sep 17 00:00:00 2001
From: Josh Siegle <joshs@alleninstitute.org>
Date: Fri, 19 Sep 2014 17:57:13 -0700
Subject: [PATCH] Add check for buffer overrun in AudioNode

---
 Builds/VisualStudio2012/open-ephys.vcxproj | 2 +-
 Source/Processors/AudioNode.cpp            | 8 ++++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/Builds/VisualStudio2012/open-ephys.vcxproj b/Builds/VisualStudio2012/open-ephys.vcxproj
index 916ed2f2d..7d9084d23 100644
--- a/Builds/VisualStudio2012/open-ephys.vcxproj
+++ b/Builds/VisualStudio2012/open-ephys.vcxproj
@@ -96,7 +96,7 @@
       <ProgramDataBaseFileName>$(IntDir)\</ProgramDataBaseFileName>
       <WarningLevel>Level4</WarningLevel>
       <SuppressStartupBanner>true</SuppressStartupBanner>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <MultiProcessorCompilation>false</MultiProcessorCompilation>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/Source/Processors/AudioNode.cpp b/Source/Processors/AudioNode.cpp
index a804995f4..6abd062f2 100755
--- a/Source/Processors/AudioNode.cpp
+++ b/Source/Processors/AudioNode.cpp
@@ -336,7 +336,7 @@ void AudioNode::process(AudioSampleBuffer& buffer,
                     // std::cout << "Samples remaining in incoming buffer: " << orphanedSamples << std::endl;
 
 
-                    if (orphanedSamples > 0)
+                    if (orphanedSamples > 0 && (samplesInBackupBuffer + orphanedSamples < backupBuffer->getNumSamples()))
                     {
                         backupBuffer->addFrom(0,       // destination channel
                                               samplesInBackupBuffer,           // destination start sample
@@ -356,7 +356,11 @@ void AudioNode::process(AudioSampleBuffer& buffer,
                                               gain       // gain to apply
                                              );
 
-                    }
+					}
+					else {
+						samplesInBackupBuffer = 0; // just throw out the buffer in the case of an overrun
+											       // not ideal, but the output still sounds fine
+					}
 
                     // Simple implementation of a "noise gate" on audio output
                     expander.process(buffer.getWritePointer(0), // left channel
-- 
GitLab