aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2022-11-28 02:53:57 +0100
committerGitHub <noreply@github.com>2022-11-28 02:53:57 +0100
commit472119c8da7edaf7bf60fa75e87812e5cb16e33b (patch)
treefa0ca994151c5976548d4d09ce32387c707a902b
parent1865ea87e538047efaf36c7a707c30390d620496 (diff)
sfdnsres; Fix deserializer of AddrInfoSerialized when addresses are empty (#3924)1.1.393
-rw-r--r--Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs8
-rw-r--r--Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Types/AddrInfo4.cs1
-rw-r--r--Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Types/AddrInfoSerialized.cs9
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);