From 9facc86b6add4e3a02d2ef499a4cf4e82302e189 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Fri, 12 May 2023 21:35:23 -0400 Subject: [PATCH] audio: more AudioStream allocation work. This was only including the resampling buffer needs if it was larger the other allocation needs, but it needs to be included unconditionally. For safety's sake, we also make sure the pre-resample buffer doesn't risk overflow, too, but this might not be necessary in practice. --- src/audio/SDL_audiocvt.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/audio/SDL_audiocvt.c b/src/audio/SDL_audiocvt.c index f566f16f6b..e66d31350e 100644 --- a/src/audio/SDL_audiocvt.c +++ b/src/audio/SDL_audiocvt.c @@ -801,7 +801,7 @@ static int CalculateAudioStreamWorkBufSize(const SDL_AudioStream *stream, int le if (stream->dst_rate != stream->src_rate) { /* calculate requested sample frames needed before resampling. Use a Uint64 so the multiplication doesn't overflow. */ const int input_frames = ((int) ((((Uint64) workbuf_frames) * stream->src_rate) / stream->dst_rate)); - inputlen = input_frames * stream->src_sample_frame_size; + inputlen = input_frames * stream->max_sample_frame_size; if (inputlen > workbuflen) { workbuflen = inputlen; } @@ -811,10 +811,7 @@ static int CalculateAudioStreamWorkBufSize(const SDL_AudioStream *stream, int le workbuflen = inputlen; } /* Calculate space needed after resample (which lives in a second copy in the same buffer). */ - inputlen += workbuf_frames * stream->pre_resample_channels * sizeof (float); - if (inputlen > workbuflen) { - workbuflen = inputlen; - } + workbuflen += workbuf_frames * stream->pre_resample_channels * sizeof (float); } return workbuflen;