From 87775d35e0d7cff7c7563c1cbddffb817f01752e Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Thu, 16 Mar 2017 19:24:36 -0400 Subject: [PATCH] null pointer checks on all uses of WaveTrackCache::Get --- src/Mix.cpp | 20 ++++++++++++++++---- src/WaveClip.cpp | 10 +++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/Mix.cpp b/src/Mix.cpp index db4477f56..96b8089a4 100644 --- a/src/Mix.cpp +++ b/src/Mix.cpp @@ -456,7 +456,10 @@ size_t Mixer::MixVariableRates(int *channelFlags, WaveTrackCache &cache, if (getLen > 0) { if (backwards) { auto results = cache.Get(floatSample, *pos - (getLen - 1), getLen); - memcpy(&queue[*queueLen], results, sizeof(float) * getLen); + if (results) + memcpy(&queue[*queueLen], results, sizeof(float) * getLen); + else + memset(&queue[*queueLen], 0, sizeof(float) * getLen); track->GetEnvelopeValues(mEnvValues, getLen, @@ -465,7 +468,10 @@ size_t Mixer::MixVariableRates(int *channelFlags, WaveTrackCache &cache, } else { auto results = cache.Get(floatSample, *pos, getLen); - memcpy(&queue[*queueLen], results, sizeof(float) * getLen); + if (results) + memcpy(&queue[*queueLen], results, sizeof(float) * getLen); + else + memset(&queue[*queueLen], 0, sizeof(float) * getLen); track->GetEnvelopeValues(mEnvValues, getLen, @@ -571,7 +577,10 @@ size_t Mixer::MixSameRate(int *channelFlags, WaveTrackCache &cache, if (backwards) { auto results = cache.Get(floatSample, *pos - (slen - 1), slen); - memcpy(mFloatBuffer, results, sizeof(float) * slen); + if (results) + memcpy(mFloatBuffer, results, sizeof(float) * slen); + else + memset(mFloatBuffer, 0, sizeof(float) * slen); track->GetEnvelopeValues(mEnvValues, slen, t - (slen - 1) / mRate); for(decltype(slen) i = 0; i < slen; i++) mFloatBuffer[i] *= mEnvValues[i]; // Track gain control will go here? @@ -581,7 +590,10 @@ size_t Mixer::MixSameRate(int *channelFlags, WaveTrackCache &cache, } else { auto results = cache.Get(floatSample, *pos, slen); - memcpy(mFloatBuffer, results, sizeof(float) * slen); + if (results) + memcpy(mFloatBuffer, results, sizeof(float) * slen); + else + memset(mFloatBuffer, 0, sizeof(float) * slen); track->GetEnvelopeValues(mEnvValues, slen, t); for(decltype(slen) i = 0; i < slen; i++) mFloatBuffer[i] *= mEnvValues[i]; // Track gain control will go here? diff --git a/src/WaveClip.cpp b/src/WaveClip.cpp index 9e7859475..00c7ef09a 100644 --- a/src/WaveClip.cpp +++ b/src/WaveClip.cpp @@ -854,12 +854,16 @@ bool SpecCache::CalculateOneSpectrum myLen) ); - if (copy) - memcpy(adj, useBuffer, myLen * sizeof(float)); + if (copy) { + if (useBuffer) + memcpy(adj, useBuffer, myLen * sizeof(float)); + else + memset(adj, 0, myLen * sizeof(float)); + } } } - if (copy) + if (copy || !useBuffer) useBuffer = scratch; if (autocorrelation) {