From 944cf6e31858f8181252ee0556acce58126cfb7f Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Wed, 30 Sep 2020 14:07:04 +0200 Subject: [PATCH] util: fix UTI_BytesToHex() to handle zero-length input --- test/unit/util.c | 3 +++ util.c | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/test/unit/util.c b/test/unit/util.c index e597d97..052eb31 100644 --- a/test/unit/util.c +++ b/test/unit/util.c @@ -330,9 +330,12 @@ void test_unit(void) { TEST_CHECK(UTI_HexToBytes(buf, buf, sizeof (buf)) == 7); TEST_CHECK(memcmp(buf, "\xAB\x12\x34\x56\x78\x00\x01", 7) == 0); + TEST_CHECK(UTI_BytesToHex("", 0, buf, 0) == 0); TEST_CHECK(UTI_BytesToHex("\xAB\x12\x34\x56\x78\x00\x01", 7, buf, 14) == 0); TEST_CHECK(UTI_BytesToHex("\xAB\x12\x34\x56\x78\x00\x01", 7, buf, 15) == 1); TEST_CHECK(strcmp(buf, "AB123456780001") == 0); + TEST_CHECK(UTI_BytesToHex("\xAB\x12\x34\x56\x78\x00\x01", 0, buf, 15) == 1); + TEST_CHECK(strcmp(buf, "") == 0); TEST_CHECK(snprintf(buf, sizeof (buf), "%s", "") < sizeof (buf)); TEST_CHECK(UTI_SplitString(buf, words, 3) == 0); diff --git a/util.c b/util.c index 5831ec4..673ca06 100644 --- a/util.c +++ b/util.c @@ -1417,6 +1417,11 @@ UTI_BytesToHex(const void *buf, unsigned int buf_len, char *hex, unsigned int he { unsigned int i, l; + if (hex_len < 1) + return 0; + + hex[0] = '\0'; + for (i = l = 0; i < buf_len; i++, l += 2) { if (l + 2 >= hex_len || snprintf(hex + l, hex_len - l, "%02hhX", ((const char *)buf)[i]) != 2)