From 65988263cf0fb78e97f46f3ca3a591698be14c71 Mon Sep 17 00:00:00 2001 From: Rebecca Wallander Date: Sat, 11 Apr 2026 13:37:24 +0200 Subject: [PATCH] Handle raw dvd sectors for iso9660 --- Aaru.Decoders/DVD/Sector.cs | 10 ++++++++++ Aaru.Filesystems/ISO9660/Mode2.cs | 20 ++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/Aaru.Decoders/DVD/Sector.cs b/Aaru.Decoders/DVD/Sector.cs index 63033a30f..9373ba458 100644 --- a/Aaru.Decoders/DVD/Sector.cs +++ b/Aaru.Decoders/DVD/Sector.cs @@ -434,4 +434,14 @@ public sealed class Sector return ErrorNumber.NoError; } + + public static byte[] GetUserData(byte[] data) + { + if(data.Length != 2064) return data; + + byte[] sector = new byte[2048]; + Array.Copy(data, 12, sector, 0, 2048); + + return sector; + } } \ No newline at end of file diff --git a/Aaru.Filesystems/ISO9660/Mode2.cs b/Aaru.Filesystems/ISO9660/Mode2.cs index 30edf4be3..e93e458c3 100644 --- a/Aaru.Filesystems/ISO9660/Mode2.cs +++ b/Aaru.Filesystems/ISO9660/Mode2.cs @@ -135,7 +135,14 @@ public sealed partial class ISO9660 if(_blockSize == 2048) { - buffer = Sector.GetUserData(data, interleaved, fileNumber); + if(data.Length == 2064) + { + buffer = Decoders.DVD.Sector.GetUserData(data); + } + else + { + buffer = Sector.GetUserData(data, interleaved, fileNumber); + } return ErrorNumber.NoError; } @@ -232,7 +239,16 @@ public sealed partial class ISO9660 } } - byte[] sectorData = Sector.GetUserData(data, interleaved, fileNumber); + byte[] sectorData; + + if(data.Length == 2064) + { + sectorData = Decoders.DVD.Sector.GetUserData(data); + } + else + { + sectorData = Sector.GetUserData(data, interleaved, fileNumber); + } ms.Write(sectorData, 0, sectorData.Length); }