From c13a077d15d388399f0375665d89b909d8af5be0 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 13 Nov 2016 00:09:02 -0800 Subject: [PATCH] Fixed bug 3488 - Random crashes (because Memory overlap in audio converters detected by Valgrind) Vitaly Novichkov Okay, when I researched code and algorithm, I tried to replace condition "while(dst >= target)" with "while(dst > target)" and crashes are gone. Seems on some moments it tries to write into the place before memory block begin, therefore phantom crashes appearing after some moments. --- src/audio/SDL_audiotypecvt.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/audio/SDL_audiotypecvt.c b/src/audio/SDL_audiotypecvt.c index e12869de1..384f50faa 100644 --- a/src/audio/SDL_audiotypecvt.c +++ b/src/audio/SDL_audiotypecvt.c @@ -239,7 +239,7 @@ SDL_Upsample_Arbitrary(SDL_AudioCVT *cvt, const int channels) SDL_memcpy(sample, src, cpy); SDL_memcpy(last_sample, src, cpy); - while (dst >= target) { + while (dst > target) { SDL_memcpy(dst, sample, cpy); dst -= 8; eps += srcsize; @@ -320,7 +320,7 @@ SDL_Upsample_x2(SDL_AudioCVT *cvt, const int channels) SDL_assert(channels <= 8); SDL_memcpy(last_sample, src, cpy); - while (dst >= target) { + while (dst > target) { for (i = 0; i < channels; i++) { dst[i] = (float) ((((double)src[i]) + ((double)last_sample[i])) * 0.5); } @@ -355,7 +355,7 @@ SDL_Upsample_x4(SDL_AudioCVT *cvt, const int channels) SDL_assert(channels <= 8); SDL_memcpy(last_sample, src, cpy); - while (dst >= target) { + while (dst > target) { for (i = 0; i < channels; i++) { dst[i] = (float) ((((double) src[i]) + (3.0 * ((double) last_sample[i]))) * 0.25); }