From ac7f760a77b8aee0d4ce86ec355ff20cb3c62bf4 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sat, 3 Feb 2018 02:53:38 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9BFix=20error=20sector=20list=20overf?= =?UTF-8?q?lowing=20total=20sectors=20on=20dump.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DiscImageChef.Core/Devices/Dumping/ATA.cs | 2 ++ DiscImageChef.Core/Devices/Dumping/CompactDisc.cs | 2 ++ DiscImageChef.Core/Devices/Dumping/SBC.cs | 2 ++ DiscImageChef.Core/Devices/Dumping/SecureDigital.cs | 2 ++ DiscImageChef.Core/Devices/Dumping/XGD.cs | 2 ++ 5 files changed, 10 insertions(+) diff --git a/DiscImageChef.Core/Devices/Dumping/ATA.cs b/DiscImageChef.Core/Devices/Dumping/ATA.cs index e685738bc..2a391b4cc 100644 --- a/DiscImageChef.Core/Devices/Dumping/ATA.cs +++ b/DiscImageChef.Core/Devices/Dumping/ATA.cs @@ -272,6 +272,8 @@ namespace DiscImageChef.Core.Devices.Dumping } else { + if(i + skip > blocks) skip = (uint)(blocks - i); + for(ulong b = i; b < i + skip; b++) resume.BadBlocks.Add(b); mhddLog.Write(i, duration < 500 ? 65535 : duration); diff --git a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs index 35486f5f4..441bce7fc 100644 --- a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs +++ b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs @@ -731,6 +731,8 @@ namespace DiscImageChef.Core.Devices.Dumping // TODO: Reset device after X errors if(stopOnError) return; // TODO: Return more cleanly + if(i + skip > blocks) skip = (uint)(blocks - i); + // Write empty data DateTime writeStart = DateTime.Now; if(supportedSubchannel != MmcSubchannel.None) diff --git a/DiscImageChef.Core/Devices/Dumping/SBC.cs b/DiscImageChef.Core/Devices/Dumping/SBC.cs index c136f37a0..70eb218e5 100644 --- a/DiscImageChef.Core/Devices/Dumping/SBC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SBC.cs @@ -385,6 +385,8 @@ namespace DiscImageChef.Core.Devices.Dumping // TODO: Reset device after X errors if(stopOnError) return; // TODO: Return more cleanly + if(i + skip > blocks) skip = (uint)(blocks - i); + // Write empty data DateTime writeStart = DateTime.Now; outputPlugin.WriteSectors(new byte[blockSize * skip], i, skip); diff --git a/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs b/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs index 359a17433..baa716ed1 100644 --- a/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs +++ b/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs @@ -317,6 +317,8 @@ namespace DiscImageChef.Core.Devices.Dumping } else { + if(i + skip > blocks) skip = (uint)(blocks - i); + for(ulong b = i; b < i + skip; b++) resume.BadBlocks.Add(b); mhddLog.Write(i, duration < 500 ? 65535 : duration); diff --git a/DiscImageChef.Core/Devices/Dumping/XGD.cs b/DiscImageChef.Core/Devices/Dumping/XGD.cs index e665dd66e..b207baba0 100644 --- a/DiscImageChef.Core/Devices/Dumping/XGD.cs +++ b/DiscImageChef.Core/Devices/Dumping/XGD.cs @@ -437,6 +437,8 @@ namespace DiscImageChef.Core.Devices.Dumping // TODO: Reset device after X errors if(stopOnError) return; // TODO: Return more cleanly + if(i + skip > blocks) skip = (uint)(blocks - i); + // Write empty data DateTime writeStart = DateTime.Now; outputPlugin.WriteSectors(new byte[BLOCK_SIZE * skip], i, skip);