From 5bf62f15811873e262342a0a33bd35d09b0c8219 Mon Sep 17 00:00:00 2001 From: havoc Date: Thu, 25 Jul 2002 09:50:06 +0000 Subject: [PATCH] fix fatal bugs in S_RawSamples_Enqueue and Dequeue relating to mis-detected buffer wraps git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@2084 d7cf8633-e32d-0410-b094-e92efae38249 --- snd_dma.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/snd_dma.c b/snd_dma.c index 096fdfb6..8be8dd7a 100644 --- a/snd_dma.c +++ b/snd_dma.c @@ -1043,9 +1043,9 @@ void S_RawSamples_Enqueue(short *samples, unsigned int length) if (s_rawsamplesbuffer_count + length > RAWSAMPLESBUFFER) return; b2 = (s_rawsamplesbuffer_start + s_rawsamplesbuffer_count) % RAWSAMPLESBUFFER; - b3 = (s_rawsamplesbuffer_start + s_rawsamplesbuffer_count + length) % RAWSAMPLESBUFFER; - if (b3 < b2) + if (b2 + length > RAWSAMPLESBUFFER) { + b3 = (b2 + length) % RAWSAMPLESBUFFER; memcpy(s_rawsamplesbuffer + b2 * 2, samples, (RAWSAMPLESBUFFER - b2) * sizeof(short[2])); memcpy(s_rawsamplesbuffer, samples + (RAWSAMPLESBUFFER - b2) * 2, b3 * sizeof(short[2])); } @@ -1065,9 +1065,9 @@ void S_RawSamples_Dequeue(int *samples, unsigned int length) if (l > s_rawsamplesbuffer_count) l = s_rawsamplesbuffer_count; b1 = (s_rawsamplesbuffer_start) % RAWSAMPLESBUFFER; - b2 = (s_rawsamplesbuffer_start + l) % RAWSAMPLESBUFFER; - if (b2 < b1) + if (b1 + l > RAWSAMPLESBUFFER) { + b2 = (b1 + l) % RAWSAMPLESBUFFER; //memcpy(samples, s_rawsamplesbuffer + b1 * 2, (RAWSAMPLESBUFFER - b1) * sizeof(short[2])); //memcpy(samples + (RAWSAMPLESBUFFER - b1) * 2, s_rawsamplesbuffer, b2 * sizeof(short[2])); for (out = samples, in = s_rawsamplesbuffer + b1 * 2, count = (RAWSAMPLESBUFFER - b1) * 2, i = 0;i < count;i++) -- 2.39.2