summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2018-05-11 14:36:22 +0900
committerSven Eden <yamakuzure@gmx.net>2018-08-24 16:47:08 +0200
commitbe15b89486397492cef33c86f51e248b55ba20dd (patch)
treeb9940c5b0c2863df5fef973e7db446ce6d4b7bec /src/test
parent7672be21e00ad67fd4dddd965ec091452c5eb9f9 (diff)
hexdecoct: ignore whitespace within the input hexadecimal text of unhexmem()
Diffstat (limited to 'src/test')
-rw-r--r--src/test/test-hexdecoct.c40
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 */