From 8cd80c89a3f45f74b04b46ea20caca150b0867e6 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 7 Jun 2017 20:03:10 +0100 Subject: [PATCH] Use uncompressed size from footer. --- DiscImageChef.Filters/LZip.cs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/DiscImageChef.Filters/LZip.cs b/DiscImageChef.Filters/LZip.cs index 4cafcf557..f23df268c 100644 --- a/DiscImageChef.Filters/LZip.cs +++ b/DiscImageChef.Filters/LZip.cs @@ -32,7 +32,6 @@ using System; using System.IO; -using DiscImageChef.Console; using SharpCompress.Compressors; using SharpCompress.Compressors.LZMA; @@ -127,8 +126,8 @@ namespace DiscImageChef.Filters basePath = null; creationTime = DateTime.UtcNow; lastWriteTime = creationTime; - innerStream = new ForcedSeekStream(dataStream, CompressionMode.Decompress, false); - decompressedSize = innerStream.Length; + decompressedSize = BitConverter.ToInt64(buffer, buffer.Length - 16); + innerStream = new ForcedSeekStream(decompressedSize, dataStream, CompressionMode.Decompress, false); opened = true; } @@ -138,8 +137,12 @@ namespace DiscImageChef.Filters basePath = null; creationTime = DateTime.UtcNow; lastWriteTime = creationTime; - innerStream = new ForcedSeekStream(dataStream, CompressionMode.Decompress, false); - decompressedSize = innerStream.Length; + byte[] tmp = new byte[8]; + dataStream.Seek(-16 ,SeekOrigin.End); + dataStream.Read(tmp, 0, 8); + decompressedSize = BitConverter.ToInt64(tmp, 0); + dataStream.Seek(0, SeekOrigin.Begin); + innerStream = new ForcedSeekStream(decompressedSize, dataStream, CompressionMode.Decompress, false); opened = true; } @@ -154,8 +157,12 @@ namespace DiscImageChef.Filters FileInfo fi = new FileInfo(path); creationTime = fi.CreationTimeUtc; lastWriteTime = fi.LastWriteTimeUtc; - innerStream = new ForcedSeekStream(dataStream, CompressionMode.Decompress, false); - decompressedSize = innerStream.Length; + byte[] tmp = new byte[8]; + dataStream.Seek(-16, SeekOrigin.End); + dataStream.Read(tmp, 0, 8); + decompressedSize = BitConverter.ToInt64(tmp, 0); + dataStream.Seek(0, SeekOrigin.Begin); + innerStream = new ForcedSeekStream(decompressedSize, dataStream, CompressionMode.Decompress, false); opened = true; }