From 04fe0d7d04ef66629d2c56e69103cdf14cd2ff04 Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Sun, 10 Mar 2024 15:10:17 -0700 Subject: [PATCH] fix crash with SDLResampler --- src/BizHawk.Emulation.Common/Sound/SDLResampler.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/BizHawk.Emulation.Common/Sound/SDLResampler.cs b/src/BizHawk.Emulation.Common/Sound/SDLResampler.cs index f2d4575119..0f1a9d3a3a 100644 --- a/src/BizHawk.Emulation.Common/Sound/SDLResampler.cs +++ b/src/BizHawk.Emulation.Common/Sound/SDLResampler.cs @@ -81,6 +81,11 @@ namespace BizHawk.Emulation.Common /// number of sample pairs public unsafe void EnqueueSamples(short[] userbuf, int nsamp) { + if (nsamp * 2 < userbuf.Length) + { + throw new("User buffer contained less than nsamp * 2 shorts!"); + } + fixed (short* ub = userbuf) { if (SDL_AudioStreamPut(_stream, (IntPtr)ub, nsamp * 4) != 0) @@ -139,11 +144,11 @@ namespace BizHawk.Emulation.Common private void InternalDrain(short[] buf, int nsamp) { - if (_outNumSamps + nsamp * 2 > _outBuf.Length) + if (_outNumSamps + nsamp * 2 > _outSamples.Length) { - var newbuf = new short[_outNumSamps + nsamp * 2]; - Buffer.BlockCopy(_outSamples, 0, newbuf, 0, _outNumSamps * sizeof(short)); - _outSamples = newbuf; + var newBuf = new short[_outNumSamps + nsamp * 2]; + Buffer.BlockCopy(_outSamples, 0, newBuf, 0, _outNumSamps * sizeof(short)); + _outSamples = newBuf; } Buffer.BlockCopy(buf, 0, _outSamples, _outNumSamps * sizeof(short), nsamp * 2 * sizeof(short));