util: fix UTI_BytesToHex() to handle zero-length input

This commit is contained in:
Miroslav Lichvar 2020-09-30 14:07:04 +02:00
parent a655eab34f
commit 944cf6e318
2 changed files with 8 additions and 0 deletions

View file

@ -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);

5
util.c
View file

@ -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)