Fixed buffer underflow in sound code when rate was changed several times.

This commit is contained in:
n-a-c-h
2005-01-12 17:00:34 +00:00
parent 5a41aafe0a
commit 756f75c10b

View File

@@ -966,13 +966,18 @@ void CheckTimers(void)
} }
} }
//Why in the world did someone make this use signed values??? -Nach
void UpdateSound(void *userdata, Uint8 * stream, int len) void UpdateSound(void *userdata, Uint8 * stream, int len)
{ {
int left; int left = Buffer_len - Buffer_head;
left = Buffer_len - Buffer_head; if (left < 0)
{
return;
}
if (left <= len) { if (left <= len)
{
memcpy(stream, &Buffer[Buffer_head], left); memcpy(stream, &Buffer[Buffer_head], left);
stream += left; stream += left;
len -= left; len -= left;
@@ -980,7 +985,8 @@ void UpdateSound(void *userdata, Uint8 * stream, int len)
Buffer_fill -= left; Buffer_fill -= left;
} }
if (len) { if (len)
{
memcpy(stream, &Buffer[Buffer_head], len); memcpy(stream, &Buffer[Buffer_head], len);
Buffer_head += len; Buffer_head += len;
Buffer_fill -= len; Buffer_fill -= len;