From 185eef0cc0106b70ca4589070ff54139fcedd08c Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Thu, 4 Jan 2018 10:11:52 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9BCorrect=20reading=20of=20non-alloca?= =?UTF-8?q?ted=20blocks=20in=20VirtualPC=20disk=20image.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DiscImageChef.DiscImages/VHD.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/DiscImageChef.DiscImages/VHD.cs b/DiscImageChef.DiscImages/VHD.cs index dddce71f..3510a643 100644 --- a/DiscImageChef.DiscImages/VHD.cs +++ b/DiscImageChef.DiscImages/VHD.cs @@ -848,6 +848,8 @@ namespace DiscImageChef.DiscImages // Sector number inside of block uint sectorInBlock = (uint)(sectorAddress % (thisDynamic.BlockSize / 512)); + if(blockAllocationTable[blockNumber] == 0xFFFFFFFF) return new byte[512]; + byte[] bitmap = new byte[bitmapSize * 512]; // Offset of block in file @@ -886,6 +888,7 @@ namespace DiscImageChef.DiscImages byte[] data = new byte[512]; uint sectorOffset = blockAllocationTable[blockNumber] + bitmapSize + sectorInBlock; thisStream = thisFilter.GetDataForkStream(); + System.Console.WriteLine("readsector {0}", sectorOffset); thisStream.Seek(sectorOffset * 512, SeekOrigin.Begin); thisStream.Read(data, 0, 512); @@ -949,7 +952,7 @@ namespace DiscImageChef.DiscImages byte[] prefix = new byte[sectorsToReadHere * 512]; // 0xFFFFFFFF means unallocated - if(sectorOffset != 0xFFFFFFFF) + if(blockAllocationTable[blockNumber] != 0xFFFFFFFF) { Stream thisStream = thisFilter.GetDataForkStream(); thisStream.Seek(sectorOffset * 512, SeekOrigin.Begin);