On Wed, Jun 15, 2011 at 5:26 AM, Fam Zheng <famc...@gmail.com> wrote: > On Tue, Jun 14, 2011 at 4:06 PM, Stefan Hajnoczi <stefa...@gmail.com> wrote: >> On Sat, Jun 04, 2011 at 08:40:50AM +0800, Fam Zheng wrote: >>> vmdk_probe for mono flat images. >>> >>> Signed-off-by: Fam Zheng <famc...@gmail.com> >>> --- >>> block/vmdk.c | 13 ++++++++++--- >>> 1 files changed, 10 insertions(+), 3 deletions(-) >>> >>> diff --git a/block/vmdk.c b/block/vmdk.c >>> index f787528..bf8d02a 100644 >>> --- a/block/vmdk.c >>> +++ b/block/vmdk.c >>> @@ -101,10 +101,17 @@ static int vmdk_probe(const uint8_t *buf, int >>> buf_size, const char *filename) >>> return 0; >>> magic = be32_to_cpu(*(uint32_t *)buf); >>> if (magic == VMDK3_MAGIC || >>> - magic == VMDK4_MAGIC) >>> + magic == VMDK4_MAGIC) { >>> return 100; >>> - else >>> - return 0; >>> + } else { >>> + char *cid_p, *ct_p, *extent_p; >>> + cid_p = strstr((char *)buf, "CID"); >>> + ct_p = strstr((char *)buf, "createType"); >>> + extent_p = strstr((char *)buf, "RW"); >>> + if (cid_p && ct_p && extent_p) >>> + return 100; >> >> NUL-terminated string functions cannot be used for probing because the >> input file may be invalid. If the magic number matches but there is no >> NUL in the buffer then the strstr(3) will run off the end of the buffer. >> >> Also note that the specification says "The descriptor file is not >> case-sensitive". "cid", "CiD", and "CID" should all be allowed. >> >> Do non-monolithic vmdk images always have "# Disk DescriptorFile" as the >> first line? Perhaps you can test for that using memcmp(3) instead. > No guarantee in specification, although VMware does start descriptors > with such a line "# Disk DescriptorFile". > But is it proper that we make this assumption?
Have you tried removing that comment line to see if VMware still recognizes the file? Stefan