Просмотр исходного кода

Bsd: Fix ArgumentOutOfRangeException in SetSocketOption (#3633)

* Bsd: Fix ArgumentOutOfRangeException in SetSocketOption

* Ensure option level is Socket before checking for SoLinger
TSRBerry 3 лет назад
Родитель
Сommit
472a621589
1 измененных файлов с 7 добавлено и 2 удалено
  1. 7 2
      Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocket.cs

+ 7 - 2
Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocket.cs

@@ -323,9 +323,14 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
 
                 int value = optionValue.Length >= 4 ? MemoryMarshal.Read<int>(optionValue) : MemoryMarshal.Read<byte>(optionValue);
 
-                if (option == BsdSocketOption.SoLinger)
+                if (level == SocketOptionLevel.Socket && option == BsdSocketOption.SoLinger)
                 {
-                    int value2 = MemoryMarshal.Read<int>(optionValue[4..]);
+                    int value2 = 0;
+
+                    if (optionValue.Length >= 8)
+                    {
+                        value2 = MemoryMarshal.Read<int>(optionValue[4..]);
+                    }
 
                     Socket.SetSocketOption(level, SocketOptionName.Linger, new LingerOption(value != 0, value2));
                 }