From 7cedf4b6c43a8c3c18ee7d6e0c1aa8541e51b3c9 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Thu, 1 Feb 2018 20:14:27 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9BFix=20dicformat=20crc64=20calculati?= =?UTF-8?q?on=20for=20metadata=20and=20last=20user=20data=20blocks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DiscImageChef.DiscImages/DiscImageChef.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/DiscImageChef.DiscImages/DiscImageChef.cs b/DiscImageChef.DiscImages/DiscImageChef.cs index a235c2ea..0ddc28e6 100644 --- a/DiscImageChef.DiscImages/DiscImageChef.cs +++ b/DiscImageChef.DiscImages/DiscImageChef.cs @@ -3114,6 +3114,7 @@ namespace DiscImageChef.DiscImages { lzmaProperties = lzmaBlockStream.Properties; lzmaBlockStream.Close(); + cmpCrc64Context.Update(lzmaProperties); if(blockStream.Length > decompressedStream.Length) currentBlockHeader.compression = CompressionType.None; } @@ -3148,7 +3149,8 @@ namespace DiscImageChef.DiscImages imageStream.Write(structureBytes, 0, structureBytes.Length); structureBytes = null; if(currentBlockHeader.compression == CompressionType.Lzma) - imageStream.Write(lzmaProperties, 0, lzmaProperties.Length); + imageStream.Write(lzmaProperties, 0, lzmaProperties.Length); + imageStream.Write(blockStream.ToArray(), 0, (int)blockStream.Length); } @@ -3195,8 +3197,12 @@ namespace DiscImageChef.DiscImages } else { - tagData = blockStream.ToArray(); - Crc64Context.Data(tagData, out tagCrc); + tagData = blockStream.ToArray(); + Crc64Context crc64Ctx = new Crc64Context(); + crc64Ctx.Init(); + crc64Ctx.Update(lzmaProperties); + crc64Ctx.Update(tagData); + tagCrc = crc64Ctx.Final(); tagBlock.cmpLength = (uint)tagData.Length + LZMA_PROPERTIES_LENGTH; tagBlock.cmpCrc64 = BitConverter.ToUInt64(tagCrc, 0); tagBlock.compression = CompressionType.Lzma;