Explorar o código

Fix loading tickets from a Sha256PartitionFileSystem (#5844)

Alex Barney %!s(int64=2) %!d(string=hai) anos
pai
achega
56fe2ff535
Modificáronse 1 ficheiros con 10 adicións e 1 borrados
  1. 10 1
      src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs

+ 10 - 1
src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs

@@ -264,7 +264,16 @@ namespace Ryujinx.HLE.FileSystem
 
 
                 if (result.IsSuccess())
                 if (result.IsSuccess())
                 {
                 {
-                    Ticket ticket = new(ticketFile.Get.AsStream());
+                    // When reading a file from a Sha256PartitionFileSystem, you can't start a read in the middle
+                    // of the hashed portion (usually the first 0x200 bytes) of the file and end the read after
+                    // the end of the hashed portion, so we read the ticket file using a single read.
+                    byte[] ticketData = new byte[0x2C0];
+                    result = ticketFile.Get.Read(out long bytesRead, 0, ticketData);
+
+                    if (result.IsFailure() || bytesRead != ticketData.Length)
+                        continue;
+
+                    Ticket ticket = new(new MemoryStream(ticketData));
                     var titleKey = ticket.GetTitleKey(KeySet);
                     var titleKey = ticket.GetTitleKey(KeySet);
 
 
                     if (titleKey != null)
                     if (titleKey != null)