Skip to content

Commit 4e6451d

Browse files
authored
Merge pull request #105744 from akien-mga/pitchshift-final-final-fix-final-v3.psd-stringop-overflow
AudioEffectPitchShift: 3rd attempt at fixing `-Wstringop-overflow` warning
2 parents 28089c4 + 80359d3 commit 4e6451d

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

servers/audio/effects/audio_effect_pitch_shift.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,13 @@ void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long ff
160160

161161
/* ***************** PROCESSING ******************* */
162162
/* this does the actual pitch shifting */
163-
memset(gSynMagn, 0, fftFrameSize*sizeof(float));
164-
memset(gSynFreq, 0, fftFrameSize*sizeof(float));
163+
size_t fftBufferSize = static_cast<size_t>(fftFrameSize) * sizeof(float);
164+
if (unlikely(fftBufferSize > MAX_FRAME_LENGTH)) {
165+
ERR_PRINT_ONCE("Invalid FFT frame size for PitchShift. This is a bug, please report.");
166+
return;
167+
}
168+
memset(gSynMagn, 0, fftBufferSize);
169+
memset(gSynFreq, 0, fftBufferSize);
165170
for (k = 0; k <= fftFrameSize2; k++) {
166171
index = k*pitchShift;
167172
if (index <= fftFrameSize2) {
@@ -214,7 +219,7 @@ void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long ff
214219
}
215220

216221
/* shift accumulator */
217-
memmove(gOutputAccum, gOutputAccum+stepSize, fftFrameSize*sizeof(float));
222+
memmove(gOutputAccum, gOutputAccum+stepSize, fftBufferSize);
218223

219224
/* move input FIFO */
220225
for (k = 0; k < inFifoLatency; k++) { gInFIFO[k] = gInFIFO[k+stepSize];

0 commit comments

Comments
 (0)