block/vdi: Fix wrong size in conditionally used memset, memcmp

Submitted by Stefan Weil on Feb. 4, 2011, 8:01 p.m.

Details

Message ID 1296849676-7429-1-git-send-email-weil@mail.berlios.de
State Accepted
Headers show

Commit Message

Stefan Weil Feb. 4, 2011, 8:01 p.m.
Error report from cppcheck:
block/vdi.c:122: error: Using sizeof for array given as function argument returns the size of pointer.
block/vdi.c:128: error: Using sizeof for array given as function argument returns the size of pointer.

Fix both by setting the correct size.

The buggy code is only used when QEMU is build without uuid support.
The bug is not critical, so there is no urgent need to apply it to
old versions of QEMU.

Cc: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 block/vdi.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

Comments

Anthony Liguori Feb. 4, 2011, 8:19 p.m.
On 02/04/2011 02:01 PM, Stefan Weil wrote:
> Error report from cppcheck:
> block/vdi.c:122: error: Using sizeof for array given as function argument returns the size of pointer.
> block/vdi.c:128: error: Using sizeof for array given as function argument returns the size of pointer.
>
> Fix both by setting the correct size.
>
> The buggy code is only used when QEMU is build without uuid support.
> The bug is not critical, so there is no urgent need to apply it to
> old versions of QEMU.
>
> Cc: Kevin Wolf<kwolf@redhat.com>
> Signed-off-by: Stefan Weil<weil@mail.berlios.de>
>    

Huh, I wouldn't have thought this was the case.  I almost feel that 
doing a #define UUID_SIZE may be better because sizeof(typeof(v)) != 
sizeof(v) is weird even by C standards.

Regards,

Anthony Liguori

> ---
>   block/vdi.c |    4 ++--
>   1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/block/vdi.c b/block/vdi.c
> index 83b9c04..083266e 100644
> --- a/block/vdi.c
> +++ b/block/vdi.c
> @@ -119,13 +119,13 @@ void uuid_unparse(const uuid_t uu, char *out);
>   #if !defined(CONFIG_UUID)
>   void uuid_generate(uuid_t out)
>   {
> -    memset(out, 0, sizeof(out));
> +    memset(out, 0, sizeof(uuid_t));
>   }
>
>   int uuid_is_null(const uuid_t uu)
>   {
>       uuid_t null_uuid = { 0 };
> -    return memcmp(uu, null_uuid, sizeof(uu)) == 0;
> +    return memcmp(uu, null_uuid, sizeof(uuid_t)) == 0;
>   }
>
>   void uuid_unparse(const uuid_t uu, char *out)
>
Kevin Wolf Feb. 7, 2011, 9:12 a.m.
Am 04.02.2011 21:19, schrieb Anthony Liguori:
> On 02/04/2011 02:01 PM, Stefan Weil wrote:
>> Error report from cppcheck:
>> block/vdi.c:122: error: Using sizeof for array given as function argument returns the size of pointer.
>> block/vdi.c:128: error: Using sizeof for array given as function argument returns the size of pointer.
>>
>> Fix both by setting the correct size.
>>
>> The buggy code is only used when QEMU is build without uuid support.
>> The bug is not critical, so there is no urgent need to apply it to
>> old versions of QEMU.
>>
>> Cc: Kevin Wolf<kwolf@redhat.com>
>> Signed-off-by: Stefan Weil<weil@mail.berlios.de>

Thanks, applied to the block branch.

> Huh, I wouldn't have thought this was the case.  I almost feel that 
> doing a #define UUID_SIZE may be better because sizeof(typeof(v)) != 
> sizeof(v) is weird even by C standards.

I think typeof(uu) is actually unsigned char*, not unsigned char[16].
Strange semantics anyway...

Kevin

Patch hide | download patch | download mbox

diff --git a/block/vdi.c b/block/vdi.c
index 83b9c04..083266e 100644
--- a/block/vdi.c
+++ b/block/vdi.c
@@ -119,13 +119,13 @@  void uuid_unparse(const uuid_t uu, char *out);
 #if !defined(CONFIG_UUID)
 void uuid_generate(uuid_t out)
 {
-    memset(out, 0, sizeof(out));
+    memset(out, 0, sizeof(uuid_t));
 }
 
 int uuid_is_null(const uuid_t uu)
 {
     uuid_t null_uuid = { 0 };
-    return memcmp(uu, null_uuid, sizeof(uu)) == 0;
+    return memcmp(uu, null_uuid, sizeof(uuid_t)) == 0;
 }
 
 void uuid_unparse(const uuid_t uu, char *out)