On 2014-11-10 at 18:03, Eric Blake wrote:
On 11/10/2014 06:45 AM, Max Reitz wrote:
No longer refuse to open images with a different refcount entry width
than 16 bits; only reject images with a refcount width larger than 64
bits (which is prohibited by the specification).
Signed-off-by: Max Reitz <mre...@redhat.com>
---
block/qcow2.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index d70e927..b718e75 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -677,10 +677,10 @@ static int qcow2_open(BlockDriverState *bs, QDict
*options, int flags,
}
/* Check support for various header values */
- if (header.refcount_order != 4) {
- report_unsupported(bs, errp, "%d bit reference counts",
- 1 << header.refcount_order);
- ret = -ENOTSUP;
+ if (header.refcount_order > 6) {
+ error_setg(errp, "Reference count entry width too large (%i bit); may "
+ "not exceed 64 bit", 1 << header.refcount_order);
Overflows if I fuzz an image to put 32 or larger into
header.refcount_order. It may be better to just tweak the error message
to state that the order cannot exceed 6, rather than trying to display
the actual bit width that the user is requesting, as then you avoid the
'1 << problem'.
Yes, probably. Or we display it in binary: "0b1%0*i",
header.refcount_order, 0 (which works since refcount_order is guaranteed
to exceed 6).
Joking aside, yes, I'll omit the theoretical refcount width.
Max