diff options
author | Ac_K <Acoustik666@gmail.com> | 2022-11-28 02:53:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-28 02:53:57 +0100 |
commit | 472119c8da7edaf7bf60fa75e87812e5cb16e33b (patch) | |
tree | fa0ca994151c5976548d4d09ce32387c707a902b | |
parent | 1865ea87e538047efaf36c7a707c30390d620496 (diff) |
sfdnsres; Fix deserializer of AddrInfoSerialized when addresses are empty (#3924)1.1.393
3 files changed, 13 insertions, 5 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs b/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs index dd45e9ea..80339b4a 100644 --- a/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs +++ b/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs @@ -566,7 +566,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Sfdnsres private static List<AddrInfoSerialized> DeserializeAddrInfos(IVirtualMemoryManager memory, ulong address, ulong size) { - List<AddrInfoSerialized> result = new List<AddrInfoSerialized>(); + List<AddrInfoSerialized> result = new(); ReadOnlySpan<byte> data = memory.GetSpan(address, (int)size); @@ -606,9 +606,9 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Sfdnsres } // NOTE: 0 = Any - AddrInfoSerializedHeader header = new AddrInfoSerializedHeader(ip, 0); - AddrInfo4 addr = new AddrInfo4(ip, (short)port); - AddrInfoSerialized info = new AddrInfoSerialized(header, addr, null, hostEntry.HostName); + AddrInfoSerializedHeader header = new(ip, 0); + AddrInfo4 addr = new(ip, (short)port); + AddrInfoSerialized info = new(header, addr, null, hostEntry.HostName); data = info.Write(data); } diff --git a/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Types/AddrInfo4.cs b/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Types/AddrInfo4.cs index 19b570e4..0a20e057 100644 --- a/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Types/AddrInfo4.cs +++ b/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Types/AddrInfo4.cs @@ -14,6 +14,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Sfdnsres.Types public byte Family; public short Port; public Array4<byte> Address; + public Array8<byte> Padding; public AddrInfo4(IPAddress address, short port) { diff --git a/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Types/AddrInfoSerialized.cs b/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Types/AddrInfoSerialized.cs index 47012396..a0613d7b 100644 --- a/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Types/AddrInfoSerialized.cs +++ b/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Types/AddrInfoSerialized.cs @@ -35,7 +35,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Sfdnsres.Types AddrInfo4? socketAddress = null; Array4<byte>? rawIPv4Address = null; - string canonicalName = null; + string canonicalName; buffer = buffer[Unsafe.SizeOf<AddrInfoSerializedHeader>()..]; @@ -50,6 +50,13 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Sfdnsres.Types Debug.Assert(header.Magic == SfdnsresContants.AddrInfoMagic); + if (header.AddressLength == 0) + { + rest = buffer; + + return null; + } + if (header.Family == (int)AddressFamily.InterNetwork) { socketAddress = MemoryMarshal.Read<AddrInfo4>(buffer); |