From d2036a3d16e9a84af85166b9eac3ee62ed5c85b9 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 29 Dec 2017 00:39:29 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9BCorrect=20bug=20on=20writing=20of?= =?UTF-8?q?=20DC42.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DiscImageChef.DiscImages/DiskCopy42.cs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/DiscImageChef.DiscImages/DiskCopy42.cs b/DiscImageChef.DiscImages/DiskCopy42.cs index c90ffb99..ae8aa21f 100644 --- a/DiscImageChef.DiscImages/DiskCopy42.cs +++ b/DiscImageChef.DiscImages/DiskCopy42.cs @@ -795,8 +795,8 @@ namespace DiscImageChef.DiscImages public bool Create(string path, MediaType mediaType, Dictionary options, ulong sectors) { - header = new Dc42Header(); - bool tags = false; + header = new Dc42Header(); + bool tags = false; bool macosx = false; if(options != null && options.TryGetValue("macosx", out string tmpOption)) @@ -920,6 +920,7 @@ namespace DiscImageChef.DiscImages return false; } + IsWriting = true; ErrorMessage = null; return true; } @@ -938,6 +939,12 @@ namespace DiscImageChef.DiscImages return false; } + if(data.Length != 512) + { + ErrorMessage = "Incorrect data size"; + return false; + } + if(sectorAddress >= sectorsToWrite) { ErrorMessage = "Tried to write past image size"; @@ -959,19 +966,13 @@ namespace DiscImageChef.DiscImages return false; } - if(data.Length != 512) - { - ErrorMessage = "Incorrect data size"; - return false; - } - if(data.Length % 512 != 0) { ErrorMessage = "Incorrect data size"; return false; } - if(sectorAddress + length >= sectorsToWrite) + if(sectorAddress + length > sectorsToWrite) { ErrorMessage = "Tried to write past image size"; return false; @@ -1039,7 +1040,7 @@ namespace DiscImageChef.DiscImages return false; } - if(sectorAddress + length >= sectorsToWrite) + if(sectorAddress + length > sectorsToWrite) { ErrorMessage = "Tried to write past image size"; return false; @@ -1073,6 +1074,9 @@ namespace DiscImageChef.DiscImages return false; } + // No tags where written + if(writingStream.Length == 0x54 + header.DataSize) header.TagSize = 0; + writingStream.Seek(0x54, SeekOrigin.Begin); byte[] data = new byte[header.DataSize]; writingStream.Read(data, 0, (int)header.DataSize);