From 78ee88a799d810b08fc7cb8a03795ee19bbb40df Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 14 Jun 2020 15:13:50 +0100 Subject: [PATCH] Fix infinite loop failing to cross leadout dumping CDs. --- Aaru.Core/Devices/Dumping/CompactDisc/Data.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs index 84a92e3a8..228543659 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs @@ -266,6 +266,11 @@ namespace Aaru.Core.Devices.Dumping UpdateProgress?.Invoke($"Reading sector {i} of {blocks} ({currentSpeed:F3} MiB/sec.)", (long)i, (long)blocks); + if(crossingLeadOut && + failedCrossingLeadOut && + blocksToRead > 1) + blocksToRead--; + if(_supportsPlextorD8 && !inData) { sense = ReadPlextorWithSubchannel(out cmdBuf, out senseBuf, firstSectorToRead, blockSize, @@ -487,6 +492,12 @@ namespace Aaru.Core.Devices.Dumping if(!sense && !_dev.Error) { + if(crossingLeadOut && failedCrossingLeadOut) + { + byte[] tmp = new byte[cmdBuf.Length + blockSize]; + Array.Copy(cmdBuf, 0, tmp, 0, cmdBuf.Length); + } + // Because one block has been partially used to fix the offset if(_fixOffset && !inData &&