From ab4bb4cca3dc570b438f11a12ccda7bf2d58cd2b Mon Sep 17 00:00:00 2001 From: Deterous <138427222+Deterous@users.noreply.github.com> Date: Mon, 20 Apr 2026 11:13:01 +0900 Subject: [PATCH] Fix XDVDFS bug (#88) * Fix XDVDFS bug * Move check and seek earlier --- SabreTools.Serialization.Readers/XDVDFS.cs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/SabreTools.Serialization.Readers/XDVDFS.cs b/SabreTools.Serialization.Readers/XDVDFS.cs index 1127f363..fe09b63b 100644 --- a/SabreTools.Serialization.Readers/XDVDFS.cs +++ b/SabreTools.Serialization.Readers/XDVDFS.cs @@ -146,6 +146,10 @@ namespace SabreTools.Serialization.Readers var obj = new Dictionary(); + // Seek to current descriptor + data.SeekIfPossible(initialOffset + (((long)offset) * Constants.SectorSize), SeekOrigin.Begin); + + // Parse current descriptor var dd = ParseDirectoryDescriptor(data, initialOffset, offset, size); if (dd is null) return null; @@ -161,13 +165,6 @@ namespace SabreTools.Serialization.Readers if (obj.ContainsKey(dr.ExtentOffset)) continue; - // Ensure offset is valid - if ((((long)dr.ExtentOffset) * Constants.SectorSize) + size > data.Length) - return null; - - // Seek to child descriptor - data.SeekIfPossible(initialOffset + (((long)dr.ExtentOffset) * Constants.SectorSize), SeekOrigin.Begin); - // Get all descriptors from child var descriptors = ParseDirectoryDescriptors(data, initialOffset, dr.ExtentOffset, dr.ExtentSize); if (descriptors is null)