Tags: patch

Please find attached patch, it fixes the crash for me.
This patch can also be found on my develop branch:
https://github.com/Lekensteyn/dmg2img/commit/0b1e72d67d
(not an official repo)
-- 
Kind regards,
Peter Wu
https://lekensteyn.nl
>From 0b1e72d67d5acf3466cd9745746e6a8a95a86b5f Mon Sep 17 00:00:00 2001
From: Peter Wu <pe...@lekensteyn.nl>
Date: Wed, 16 Dec 2015 00:58:47 +0100
Subject: [PATCH] Fix crash on invalid block signature

Delay increasing the partition count until we know that the partition
count is certainly OK.

Reported at
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=778827

Signed-off-by: Peter Wu <pe...@lekensteyn.nl>
---
 dmg2img.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/dmg2img.c b/dmg2img.c
index 3a60390..3ff5c04 100644
--- a/dmg2img.c
+++ b/dmg2img.c
@@ -264,8 +264,7 @@ int main(int argc, char *argv[])
 				break;
 			data_size = data_end - data_begin;
 			i = partnum;
-			++partnum;
-			parts = (struct _mishblk *)realloc(parts, partnum * sizeof(struct _mishblk));
+			parts = (struct _mishblk *)realloc(parts, (partnum + 1) * sizeof(struct _mishblk));
 			if (!parts)
 				mem_overflow();
 
@@ -279,8 +278,11 @@ int main(int argc, char *argv[])
 			cleanup_base64(base64data, data_size);
 			decode_base64(base64data, strlen(base64data), base64data, &tmplen);
 			fill_mishblk(base64data, &parts[i]);
-			if (parts[i].BlocksSignature != 0x6D697368)
+			if (parts[i].BlocksSignature != 0x6D697368) {
+				if (verbose >= 3)
+					printf("Unrecognized block signature %08X", parts[i].BlocksSignature);
 				break;
+			}
 
 			parts[i].Data = (char *)malloc(parts[i].BlocksRunCount * 0x28);
 			if (!parts[i].Data)
@@ -289,6 +291,7 @@ int main(int argc, char *argv[])
 
 			free(base64data);
 	
+			++partnum;
 			partname_begin = strstr(data_begin, name_key);
 			partname_begin = strstr(partname_begin, name_begin) + strlen(name_begin);
 			partname_end = strstr(partname_begin, name_end);
-- 
2.6.4

Reply via email to