aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libstrongswan/tests/suites/test_chunk.c21
-rw-r--r--src/libstrongswan/utils/chunk.c8
2 files changed, 18 insertions, 11 deletions
diff --git a/src/libstrongswan/tests/suites/test_chunk.c b/src/libstrongswan/tests/suites/test_chunk.c
index b82b1436f..9b2e48b0e 100644
--- a/src/libstrongswan/tests/suites/test_chunk.c
+++ b/src/libstrongswan/tests/suites/test_chunk.c
@@ -397,15 +397,15 @@ START_TEST(test_base16)
{FALSE, "fooba", "666f6f6261"},
{FALSE, "foobar", "666f6f626172"},
};
- testdata_t test_colon[] = {
- {TRUE, "", ""},
- {TRUE, "f", "66"},
+ testdata_t test_prefix_colon[] = {
+ {TRUE, "", "0x"},
+ {TRUE, "f", "0x66"},
{TRUE, "fo", "66:6F"},
- {TRUE, "foo", "66:6F:6F"},
+ {TRUE, "foo", "0x66:6F:6F"},
{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:6f6f:6261:72"},
+ {FALSE, "foobar", "0x66:6f6f:6261:72"},
};
int i;
@@ -430,14 +430,15 @@ START_TEST(test_base16)
free(out.ptr);
}
- for (i = 0; i < countof(test_colon); i++)
+ for (i = 0; i < countof(test_prefix_colon); i++)
{
chunk_t out;
- out = chunk_from_hex(chunk_create(test_colon[i].out, strlen(test_colon[i].out)), NULL);
- fail_unless(strneq(out.ptr, test_colon[i].in, out.len),
+ out = chunk_from_hex(chunk_create(test_prefix_colon[i].out,
+ 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",
- test_colon[i].in, &out);
+ test_prefix_colon[i].in, &out);
free(out.ptr);
}
}
diff --git a/src/libstrongswan/utils/chunk.c b/src/libstrongswan/utils/chunk.c
index 2f824a259..0c50ab788 100644
--- a/src/libstrongswan/utils/chunk.c
+++ b/src/libstrongswan/utils/chunk.c
@@ -504,7 +504,13 @@ chunk_t chunk_from_hex(chunk_t hex, char *buf)
u_char *ptr;
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;
ptr = hex.ptr;
for (i = 0; i < hex.len; i++)