Hi, These series improve QEMU support for DMG image files:
- Images which are not multiples of a block size (512) are now properly recognized ("properly detect the UDIF trailer"). - Block descriptors stored in the XML plist section rather than the Resource Fork are now recognized ("process XML plists"). - The virtual (uncompressed) image size is now advertised ("set virtual size to a non-zero value"). - Files which have a different data offsets are now properly handled ("fix sector data offset calculation"). - bzip2-compressed chunks can now be read ("support bzip2 block entry types"). This adds a new --enable-bzip2 option. - Files with a large all-zeroes data chunk do not trip an error anymore ("improve zeroes handling"). The XML plist patch depends on these refactorings (which add no new functionality): block/dmg: extract mish block decoding functionality block/dmg: extract processing of resource forks block/dmg: process a buffer instead of reading ints Finally there is this patch which avoids a DoS (large memory allocation) due to a missing check on untrusted data: block/dmg: validate chunk size to avoid overflow These patches were tested against disk images, but since DMG files are also used for installers, I used those too. The following files pass these patches: - filename + source; real size in bytes; publication date. (additional info: whether BLXX is stored in XML plists or a resource fork; compression method) - espgs-7.05.5-0.ppc.dmg[1] 5593786 2002-09 (rsrc fork, zlib, sector offsets start at 0) - Wireshark 1.12.2 Intel 64.dmg[2] 26375047 2014-11 (xml, zlib) - tuxpaint-0.9.15-macosx.dmg[3] 9022458 2005-11 (rsrc fork, zlib) - vlc-2.1.5.dmg[4] 33519849 2014-07 (xml, bzlib) - OS X Yosemite.dmg 5189100314 2014-10 (xml, bzlib) - InstallESD.dmg (in prev. image) 5164763151 2014-10 (xml, zlib; data offset is non-zero) For these above files, I executed `qemu-img info foo.dmg` to verify that there is no EINVAL error and `qemu-img convert -f dmg -O raw foo.dmg foo.raw` to check whether reading works. The resulting `foo.raw` was then compared against `foo.img` as generated by `dmg2img foo.dmg`. This file was tested and 'qemu-img info' works properly, but conversion failed because the Apple Data Compression (ADC) format is not supported[5]. - NetBoot9.dmg[6] 534884900 2003-09 (rsrc fork, adc) These patches (rebased against current master) can be found at: https://git.lekensteyn.nl/peter/qemu/log/?h=block-dmg-2.3 (development and testing was done against v2.2.0, branch block-dmg-2.2) Kind regards, Peter [1]: http://sourceforge.net/projects/espgs/files/espgs/7.05.5/ [2]: https://www.wireshark.org/download/osx/ [3]: http://sourceforge.net/projects/tuxpaint/files/tuxpaint/0.9.15/ [4]: http://download.videolan.org/pub/videolan/vlc/2.1.5/macosx/ [5]: https://bugzilla.redhat.com/show_bug.cgi?id=1058132 [6]: http://download.info.apple.com/Mac_OS_X/693-4445.20030912.gnr39/NetBoot9.dmg -- Peter Wu (10): block/dmg: properly detect the UDIF trailer block/dmg: extract mish block decoding functionality block/dmg: extract processing of resource forks block/dmg: process a buffer instead of reading ints block/dmg: validate chunk size to avoid overflow block/dmg: process XML plists block/dmg: set virtual size to a non-zero value block/dmg: fix sector data offset calculation block/dmg: support bzip2 block entry types block/dmg: improve zeroes handling block/dmg.c | 475 +++++++++++++++++++++++++++++++++++++++++++++--------------- configure | 31 ++++ 2 files changed, 390 insertions(+), 116 deletions(-) -- 2.2.1