diff options
author | Pavel Filipenský <pfilipen@redhat.com> | 2022-01-07 11:57:08 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2022-01-10 23:31:33 +0000 |
commit | 5ac8762256830f1c7e48dcc9684802f00fc3b5c2 (patch) | |
tree | 761324d985046a3807b0d0819b8e59e57858df9b /ctdb | |
parent | 41c86c9dda3fd7a733f54fa1af31adec96bb4a33 (diff) | |
download | samba-5ac8762256830f1c7e48dcc9684802f00fc3b5c2.tar.gz |
ctdb:utils: Improve error handling of hex_decode()
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>
Diffstat (limited to 'ctdb')
-rw-r--r-- | ctdb/utils/tdb/tdb_mutex_check.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/ctdb/utils/tdb/tdb_mutex_check.c b/ctdb/utils/tdb/tdb_mutex_check.c index da794b8dab5..4da0c40d41b 100644 --- a/ctdb/utils/tdb/tdb_mutex_check.c +++ b/ctdb/utils/tdb/tdb_mutex_check.c @@ -30,30 +30,42 @@ #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); |