From cf4c78b9c825f61ff3ee83eff88442a149ae01d9 Mon Sep 17 00:00:00 2001 From: gdkchan <gab.dark.100@gmail.com> Date: Mon, 12 Jun 2023 21:12:06 -0300 Subject: Make LM skip instead of crashing for invalid messages (#5290) --- src/Ryujinx.Common/Memory/SpanReader.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/Ryujinx.Common/Memory/SpanReader.cs') diff --git a/src/Ryujinx.Common/Memory/SpanReader.cs b/src/Ryujinx.Common/Memory/SpanReader.cs index 673932d0..9a1a0a3f 100644 --- a/src/Ryujinx.Common/Memory/SpanReader.cs +++ b/src/Ryujinx.Common/Memory/SpanReader.cs @@ -24,6 +24,24 @@ namespace Ryujinx.Common.Memory return value; } + public bool TryRead<T>(out T value) where T : unmanaged + { + int valueSize = Unsafe.SizeOf<T>(); + + if (valueSize > _input.Length) + { + value = default; + + return false; + } + + value = MemoryMarshal.Cast<byte, T>(_input)[0]; + + _input = _input.Slice(valueSize); + + return true; + } + public ReadOnlySpan<byte> GetSpan(int size) { ReadOnlySpan<byte> data = _input.Slice(0, size); -- cgit v1.2.3-70-g09d2