
On Fri, Feb 15, 2008 at 09:37:53PM +0100, Jim Meyering wrote:
It'd be good to pull the duplicate capacity update out of the if- and else- blocks.
def->capacity *= ...
Also, just in case the file data is bogus enough to make the resulting product overflow, you can detect that with e.g.,
if (def->capacity > ULLONG_MAX / fileTypeInfo[i].sizeMultiplier) continue; def->capacity *= fileTypeInfo[i].sizeMultiplier;
If the test fails, I'd be tempted to give a diagnostic about the corrupt "size" data.
Originally I thought there would be no overflow risk, since the only file types with a sizeMultiplier were those with a 4 byte size field. But I see now that actually VMDK 4 format has an 8 byte size and a 512 multiplier. So I'll add the sanity check... Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|