The Saturday 16 Aug 2014 à 20:54:17 (+0200), Max Reitz wrote : > bdrv_is_allocated() may report zero clusters which most probably means > the image (file) is shorter than expected. Respect this case in order to > avoid an infinite loop. > > Signed-off-by: Max Reitz <mre...@redhat.com> > --- > qemu-io-cmds.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c > index c503fc6..860b834 100644 > --- a/qemu-io-cmds.c > +++ b/qemu-io-cmds.c > @@ -1909,7 +1909,7 @@ static int map_is_allocated(BlockDriverState *bs, > int64_t sector_num, > > num_checked = MIN(nb_sectors, INT_MAX); > ret = bdrv_is_allocated(bs, sector_num, num_checked, &num); > - if (ret == firstret) { > + if (ret == firstret && num) { > *pnum += num; > } else { > break; > @@ -1936,6 +1936,9 @@ static int map_f(BlockDriverState *bs, int argc, char > **argv) > if (ret < 0) { > error_report("Failed to get allocation status: %s", > strerror(-ret)); > return 0; > + } else if (!num) { > + error_report("Unexpected end of image"); > + return 0; > } > > retstr = ret ? " allocated" : "not allocated"; > -- > 2.0.4 > >
Reviewed-by: Benoît Canet <benoit.ca...@nodalink.com>