Am 10.10.2014 um 14:03 schrieb Benoît Canet:
+        } else if (!num) {
+            error_report("Unexpected end of image");
+            return 0;
I think this test can miss some case of Unexpected end of image.

For example supose that in map_is_allocated the first bdrv_is_allocated
actually succeed then *pnum = num. Then the bottom loop has exit on failure
and the function return.

in map_f &num is map_is_allocated *pnum so map_f's num != 0 and this very test
fails to see the unexpected end of image error.

num != 0 because some sectors where successfully queried. In my opinion, we should print the information about them we have. Then, the do-while loop is repeated; and this time, map_is_allocated() either again returns num > 0 (for whatever reason, but I'd be fine with it) or, more probably, it'll be num == 0 this time. So the error is not missed, it's just printed one iteration later.

Max

Best regards

Benoît

          }
retstr = ret ? " allocated" : "not allocated";
--
2.0.4




Reply via email to