diff --git a/DiscImageChef.Core/Devices/Dumping/ATA.cs b/DiscImageChef.Core/Devices/Dumping/ATA.cs index e685738b..2a391b4c 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 35486f5f..441bce7f 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 c136f37a..70eb218e 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 359a1743..baa716ed 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 e665dd66..b207baba 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);