On 09/13/14 15:27, John Ferlan wrote:
Coverity complains that the condition "size + 1 == 0"
cannot happen.
It's already been determined that offset+size is not larger than
buf_size (and buf_size is smaller than UINT_MAX); and also that
buff_size smaller than UINT_MAX isn't guaranteed in this function.
Although it will probably never happen the size is declared as size_t
and thus equal size to unsigned long long on 64 bit machines.
offset+size didn't overflow.
So just remove the check
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/util/virstoragefile.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 5db9184..1a02b18 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -393,8 +393,6 @@ qcowXGetBackingStore(char **res,
}
if (offset + size > buf_size || offset + size < offset)
If size is UINT_MAX, then when you add it to offset, which is a small
number, then you get something between UINT_MAX and ULLONG_MAX which is
still in range of buf_size as it's a size_t.
return BACKING_STORE_INVALID;
- if (size + 1 == 0)
- return BACKING_STORE_INVALID;
So you may have this condition theoretically true, while the check above
doesn't catch it.
if (VIR_ALLOC_N(*res, size + 1) < 0)
return BACKING_STORE_ERROR;
memcpy(*res, buf + offset, size);
Also I've looked on the specs of the qcow2 header format and it seems
that we don't do exactly the right thing here. To determine that the
qcow2 image doesn't have a backing store we sholuld use the offset
rather than size:
8 - 15: backing_file_offset
Offset into the image file at which the backing file name
is stored (NB: The string is not null terminated). 0 if the
image doesn't have a backing file.
16 - 19: backing_file_size
Length of the backing file name in bytes. Must not be
longer than 1023 bytes. Undefined if the image doesn't have
a backing file.
Also we probably should make sure that the backing file size is less
than 1024 bytes.
While I agree that the check is dead code, as we call this function with
buf_size with a reasonably low value, we probably should improve the
backing file detection code to match the specs.
Peter