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