diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-05-11 14:36:22 +0900 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2018-08-24 16:47:08 +0200 |
commit | be15b89486397492cef33c86f51e248b55ba20dd (patch) | |
tree | b9940c5b0c2863df5fef973e7db446ce6d4b7bec /src/test/test-hexdecoct.c | |
parent | 7672be21e00ad67fd4dddd965ec091452c5eb9f9 (diff) |
hexdecoct: ignore whitespace within the input hexadecimal text of unhexmem()
Diffstat (limited to 'src/test/test-hexdecoct.c')
-rw-r--r-- | src/test/test-hexdecoct.c | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/src/test/test-hexdecoct.c b/src/test/test-hexdecoct.c index 74b8e3b68..048e8cb82 100644 --- a/src/test/test-hexdecoct.c +++ b/src/test/test-hexdecoct.c @@ -79,20 +79,40 @@ static void test_undecchar(void) { assert_se(undecchar('9') == 9); } -static void test_unhexmem(void) { - const char *hex = "efa2149213"; - const char *hex_invalid = "efa214921o"; - _cleanup_free_ char *hex2 = NULL; +static void test_unhexmem_one(const char *s, size_t l, int retval) { + _cleanup_free_ char *hex = NULL; _cleanup_free_ void *mem = NULL; size_t len; - 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(unhexmem(s, l, &mem, &len) == retval); + if (retval == 0) { + char *answer; + + if (l == (size_t) - 1) + l = strlen(s); + + assert_se((hex = hexmem(mem, len))); + answer = strndupa(s, l); + assert_se(streq(delete_chars(answer, WHITESPACE), hex)); + } +} + +static void test_unhexmem(void) { + const char *hex = "efa2149213"; + const char *hex_space = " e f a\n 2\r 14\n\r\t9\t2 \n1\r3 \r\r\t"; + const char *hex_invalid = "efa214921o"; - assert_se((hex2 = hexmem(mem, len))); - assert_se(streq(hex, hex2)); + test_unhexmem_one(NULL, 0, 0); + test_unhexmem_one("", 0, 0); + test_unhexmem_one("", (size_t) -1, 0); + test_unhexmem_one(" \n \t\r \t\t \n\n\n", (size_t) -1, 0); + test_unhexmem_one(hex_invalid, strlen(hex_invalid), -EINVAL); + test_unhexmem_one(hex_invalid, (size_t) - 1, -EINVAL); + test_unhexmem_one(hex, strlen(hex) - 1, -EPIPE); + test_unhexmem_one(hex, strlen(hex), 0); + test_unhexmem_one(hex, (size_t) -1, 0); + test_unhexmem_one(hex_space, strlen(hex_space), 0); + test_unhexmem_one(hex_space, (size_t) -1, 0); } /* https://tools.ietf.org/html/rfc4648#section-10 */ |