util-lib: be stricter when decoding hex strings
If a hex string has an uneven length, generate an error instead of silently assuming a trailing '0' was in place.
This commit is contained in:
@@ -87,27 +87,19 @@ static void test_undecchar(void) {
|
||||
}
|
||||
|
||||
static void test_unhexmem(void) {
|
||||
const char *hex = "efa214921";
|
||||
const char *hex = "efa2149213";
|
||||
const char *hex_invalid = "efa214921o";
|
||||
_cleanup_free_ char *hex2 = NULL;
|
||||
_cleanup_free_ void *mem = NULL;
|
||||
size_t len;
|
||||
|
||||
assert_se(unhexmem(hex, strlen(hex), &mem, &len) == 0);
|
||||
assert_se(unhexmem(hex, strlen(hex) + 1, &mem, &len) == -EINVAL);
|
||||
assert_se(unhexmem(hex_invalid, strlen(hex_invalid), &mem, &len) == -EINVAL);
|
||||
assert_se(unhexmem(hex, strlen(hex) + 1, &mem, &len) == -EINVAL);
|
||||
assert_se(unhexmem(hex, strlen(hex) - 1, &mem, &len) == -EINVAL);
|
||||
assert_se(unhexmem(hex, strlen(hex), &mem, &len) == 0);
|
||||
|
||||
assert_se((hex2 = hexmem(mem, len)));
|
||||
|
||||
free(mem);
|
||||
|
||||
assert_se(memcmp(hex, hex2, strlen(hex)) == 0);
|
||||
|
||||
free(hex2);
|
||||
|
||||
assert_se(unhexmem(hex, strlen(hex) - 1, &mem, &len) == 0);
|
||||
assert_se((hex2 = hexmem(mem, len)));
|
||||
assert_se(memcmp(hex, hex2, strlen(hex) - 1) == 0);
|
||||
assert_se(streq(hex, hex2));
|
||||
}
|
||||
|
||||
/* https://tools.ietf.org/html/rfc4648#section-10 */
|
||||
|
||||
Reference in New Issue
Block a user