utils: chunk_from_hex() skips optional 0x prefix

This commit is contained in:
Andreas Steffen
2017-03-06 18:54:09 +01:00
parent 2d41e1c51c
commit cfdccc93f5
2 changed files with 18 additions and 11 deletions
+11 -10
View File
@@ -397,15 +397,15 @@ START_TEST(test_base16)
{FALSE, "fooba", "666f6f6261"}, {FALSE, "fooba", "666f6f6261"},
{FALSE, "foobar", "666f6f626172"}, {FALSE, "foobar", "666f6f626172"},
}; };
testdata_t test_colon[] = { testdata_t test_prefix_colon[] = {
{TRUE, "", ""}, {TRUE, "", "0x"},
{TRUE, "f", "66"}, {TRUE, "f", "0x66"},
{TRUE, "fo", "66:6F"}, {TRUE, "fo", "66:6F"},
{TRUE, "foo", "66:6F:6F"}, {TRUE, "foo", "0x66:6F:6F"},
{FALSE, "foob", "66:6f:6f:62"}, {FALSE, "foob", "66:6f:6f:62"},
{FALSE, "fooba", "66:6f:6f:62:61"}, {FALSE, "fooba", "0x66:6f:6f:62:61"},
{FALSE, "foobar", "66:6f:6f:62:61:72"}, {FALSE, "foobar", "66:6f:6f:62:61:72"},
{FALSE, "foobar", "66:6f6f:6261:72"}, {FALSE, "foobar", "0x66:6f6f:6261:72"},
}; };
int i; int i;
@@ -430,14 +430,15 @@ START_TEST(test_base16)
free(out.ptr); free(out.ptr);
} }
for (i = 0; i < countof(test_colon); i++) for (i = 0; i < countof(test_prefix_colon); i++)
{ {
chunk_t out; chunk_t out;
out = chunk_from_hex(chunk_create(test_colon[i].out, strlen(test_colon[i].out)), NULL); out = chunk_from_hex(chunk_create(test_prefix_colon[i].out,
fail_unless(strneq(out.ptr, test_colon[i].in, out.len), strlen(test_prefix_colon[i].out)), NULL);
fail_unless(strneq(out.ptr, test_prefix_colon[i].in, out.len),
"base16 conversion error - should '%s', is %#B", "base16 conversion error - should '%s', is %#B",
test_colon[i].in, &out); test_prefix_colon[i].in, &out);
free(out.ptr); free(out.ptr);
} }
} }
+7 -1
View File
@@ -504,7 +504,13 @@ chunk_t chunk_from_hex(chunk_t hex, char *buf)
u_char *ptr; u_char *ptr;
bool odd = FALSE; bool odd = FALSE;
/* subtract the number of optional ':' separation characters */ /* skip an optional 0x prefix */
if (hex.len > 1 && hex.ptr[1] == 'x' && hex.ptr[0] == '0')
{
hex = chunk_skip(hex, 2);
}
/* subtract the number of optional ':' separation characters */
len = hex.len; len = hex.len;
ptr = hex.ptr; ptr = hex.ptr;
for (i = 0; i < hex.len; i++) for (i = 0; i < hex.len; i++)