diff options
author | gdkchan <gab.dark.100@gmail.com> | 2023-08-20 03:56:30 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-20 08:56:30 +0200 |
commit | 7f96dbc0242f169caeb8461237bc01a23c115f56 (patch) | |
tree | b9205e52d2d57b26dba722848512f0b69bda0d94 | |
parent | 3e5c2113947d9de644c840377cf46c2a338d1edc (diff) |
Fix invalid audio renderer buffer size when end offset < start offset (#5588)1.1.999
* Fix invalid audio renderer buffer size when end offset < start offset
* Fix possible overflow on IsSampleOffsetInRangeForPcm
-rw-r--r-- | src/Ryujinx.Audio/Renderer/Dsp/PcmHelper.cs | 5 | ||||
-rw-r--r-- | src/Ryujinx.Audio/Renderer/Parameter/VoiceInParameter.cs | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/Ryujinx.Audio/Renderer/Dsp/PcmHelper.cs b/src/Ryujinx.Audio/Renderer/Dsp/PcmHelper.cs index d209c515..8134e6b7 100644 --- a/src/Ryujinx.Audio/Renderer/Dsp/PcmHelper.cs +++ b/src/Ryujinx.Audio/Renderer/Dsp/PcmHelper.cs @@ -20,6 +20,11 @@ namespace Ryujinx.Audio.Renderer.Dsp [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int GetBufferSize<T>(int startSampleOffset, int endSampleOffset, int offset, int count) where T : unmanaged { + if (endSampleOffset < startSampleOffset) + { + return 0; + } + return GetCountToDecode(startSampleOffset, endSampleOffset, offset, count) * Unsafe.SizeOf<T>(); } diff --git a/src/Ryujinx.Audio/Renderer/Parameter/VoiceInParameter.cs b/src/Ryujinx.Audio/Renderer/Parameter/VoiceInParameter.cs index 86f92442..f33d82aa 100644 --- a/src/Ryujinx.Audio/Renderer/Parameter/VoiceInParameter.cs +++ b/src/Ryujinx.Audio/Renderer/Parameter/VoiceInParameter.cs @@ -264,8 +264,8 @@ namespace Ryujinx.Audio.Renderer.Parameter { uint dataTypeSize = (uint)Unsafe.SizeOf<T>(); - return StartSampleOffset * dataTypeSize <= Size && - EndSampleOffset * dataTypeSize <= Size; + return (ulong)StartSampleOffset * dataTypeSize <= Size && + (ulong)EndSampleOffset * dataTypeSize <= Size; } /// <summary> |