From 1572c9362482464c816fc890e1b5617ed92f6b60 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Sat, 1 Jun 2019 09:05:06 -0700 Subject: [PATCH] Fix longstanding bug where resampler called with samples instead of frames, resulting in buffer overflow --- libraries/audio-client/src/AudioClient.cpp | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index ea84d54ecc..d75a4960ed 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -693,28 +693,20 @@ void possibleResampling(AudioSRC* resampler, } } else { + int numSourceFrames = numSourceSamples / sourceChannelCount; + if (sourceChannelCount != destinationChannelCount) { - int numChannelCoversionSamples = (numSourceSamples * destinationChannelCount) / sourceChannelCount; - int16_t* channelConversionSamples = new int16_t[numChannelCoversionSamples]; + int16_t* channelConversionSamples = new int16_t[numSourceFrames * destinationChannelCount]; sampleChannelConversion(sourceSamples, channelConversionSamples, numSourceSamples, sourceChannelCount, destinationChannelCount); - resampler->render(channelConversionSamples, destinationSamples, numChannelCoversionSamples); + resampler->render(channelConversionSamples, destinationSamples, numSourceFrames); delete[] channelConversionSamples; } else { - - unsigned int numAdjustedSourceSamples = numSourceSamples; - unsigned int numAdjustedDestinationSamples = numDestinationSamples; - - if (sourceChannelCount == 2 && destinationChannelCount == 2) { - numAdjustedSourceSamples /= 2; - numAdjustedDestinationSamples /= 2; - } - - resampler->render(sourceSamples, destinationSamples, numAdjustedSourceSamples); + resampler->render(sourceSamples, destinationSamples, numSourceFrames); } } }