ctdb:utils: Improve error handling of hex_decode()
authorPavel Filipenský <pfilipen@redhat.com>
Fri, 7 Jan 2022 10:57:08 +0000 (11:57 +0100)
committerJeremy Allison <jra@samba.org>
Mon, 10 Jan 2022 23:31:33 +0000 (23:31 +0000)
This has been found by covscan and make analyzers happy.

Pair-programmed-with: Andreas Schneider <asn@samba.org>

Signed-off-by: Pavel Filipenský <pfilipen@redhat.com>
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
ctdb/utils/tdb/tdb_mutex_check.c

index da794b8dab59da0b1dee32c381930fb34442024b..4da0c40d41b65253555632398006f29fe05528a6 100644 (file)
 #include "lib/tdb/common/tdb_private.h"
 #include "lib/tdb/common/mutex.c"
 
-static uint8_t *hex_decode(const char *hex_in, size_t *len)
+static uint8_t *hex_decode(const char *hex_in, size_t *plen)
 {
        size_t i;
        int num;
        uint8_t *buffer;
+       size_t len;
 
-       *len = strlen(hex_in) / 2;
-       buffer = malloc(*len);
+       len = strlen(hex_in) / 2;
+       if (len == 0) {
+               return NULL;
+       }
+
+       buffer = malloc(len);
+       if (buffer == NULL) {
+               return NULL;
+       }
 
-       for (i=0; i<*len; i++) {
+       for (i = 0; i < len; i++) {
                sscanf(&hex_in[i*2], "%02X", &num);
                buffer[i] = (uint8_t)num;
        }
 
+       *plen = len;
+
        return buffer;
 }
 
 static int get_hash_chain(struct tdb_context *tdb, const char *hex_key)
 {
-       TDB_DATA key;
+       TDB_DATA key = {
+               .dsize = 0,
+       };
        unsigned int hash;
 
        key.dptr = hex_decode(hex_key, &key.dsize);
-       if (key.dsize == 0) {
+       if (key.dptr == NULL || key.dsize == 0) {
                return -1;
        }
        hash = tdb_jenkins_hash(&key);