1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-22 23:30:07 +02:00

Implement mayThrow argument of WaveTrackCache::Get properly...

... So that we don't get into a loop re-throwing exceptions while trying to
draw a corrupt project.

And so that we don't crash playing a corrupt project.
This commit is contained in:
Paul Licameli 2017-10-20 21:47:40 -04:00
parent 39a5669cb9
commit 404eca84c8

View File

@ -2744,7 +2744,7 @@ constSamplePtr WaveTrackCache::Get(sampleFormat format,
if (start1 == end0) {
const auto len1 = mPTrack->GetBestBlockSize(start1);
wxASSERT(len1 <= mBufferSize);
if (!mPTrack->Get(samplePtr(mBuffers[1].data.get()), floatSample, start1, len1))
if (!mPTrack->Get(samplePtr(mBuffers[1].data.get()), floatSample, start1, len1, fillZero, mayThrow))
return 0;
mBuffers[1].start = start1;
mBuffers[1].len = len1;
@ -2769,7 +2769,8 @@ constSamplePtr WaveTrackCache::Get(sampleFormat format,
mOverlapBuffer.Resize(len, format);
// initLen is not more than len:
auto sinitLen = initLen.as_size_t();
if (!mPTrack->Get(mOverlapBuffer.ptr(), format, start, sinitLen))
if (!mPTrack->Get(mOverlapBuffer.ptr(), format, start, sinitLen,
fillZero, mayThrow))
return 0;
wxASSERT( sinitLen <= remaining );
remaining -= sinitLen;
@ -2818,7 +2819,7 @@ constSamplePtr WaveTrackCache::Get(sampleFormat format,
mOverlapBuffer.Resize(len, format);
buffer = mOverlapBuffer.ptr();
}
if (!mPTrack->Get(buffer, format, start, remaining))
if (!mPTrack->Get(buffer, format, start, remaining, fillZero, mayThrow))
return 0;
}
@ -2827,7 +2828,7 @@ constSamplePtr WaveTrackCache::Get(sampleFormat format,
// Cache works only for float format.
mOverlapBuffer.Resize(len, format);
if (mPTrack->Get(mOverlapBuffer.ptr(), format, start, len))
if (mPTrack->Get(mOverlapBuffer.ptr(), format, start, len, fillZero, mayThrow))
return mOverlapBuffer.ptr();
else
return 0;