aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2023-08-20 03:56:30 -0300
committerGitHub <noreply@github.com>2023-08-20 08:56:30 +0200
commit7f96dbc0242f169caeb8461237bc01a23c115f56 (patch)
treeb9205e52d2d57b26dba722848512f0b69bda0d94
parent3e5c2113947d9de644c840377cf46c2a338d1edc (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.cs5
-rw-r--r--src/Ryujinx.Audio/Renderer/Parameter/VoiceInParameter.cs4
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>