utils: chunk_from_hex() skips optional 0x prefix
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -504,6 +504,12 @@ chunk_t chunk_from_hex(chunk_t hex, char *buf)
|
|||||||
u_char *ptr;
|
u_char *ptr;
|
||||||
bool odd = FALSE;
|
bool odd = FALSE;
|
||||||
|
|
||||||
|
/* 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 */
|
/* subtract the number of optional ':' separation characters */
|
||||||
len = hex.len;
|
len = hex.len;
|
||||||
ptr = hex.ptr;
|
ptr = hex.ptr;
|
||||||
|
|||||||
Reference in New Issue
Block a user