diff options
author | Lennart Poettering <lennart@poettering.net> | 2021-06-22 19:43:37 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2021-07-08 09:30:03 +0200 |
commit | 82b4ec445bac33b1305786071fac361bdd22f4df (patch) | |
tree | d4fc58bfa7ae145c2de3bd542f26019573ec6407 /src/test/test-hexdecoct.c | |
parent | 7b0da71d4976066f53dffa250d659d725f2d486c (diff) | |
download | systemd-82b4ec445bac33b1305786071fac361bdd22f4df.tar.gz |
hexdecoct: optionally, line break base64 encoded data
Diffstat (limited to 'src/test/test-hexdecoct.c')
-rw-r--r-- | src/test/test-hexdecoct.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/test/test-hexdecoct.c b/src/test/test-hexdecoct.c index c9d318b8d1..a3767b47be 100644 --- a/src/test/test-hexdecoct.c +++ b/src/test/test-hexdecoct.c @@ -5,6 +5,7 @@ #include "alloc-util.h" #include "hexdecoct.h" #include "macro.h" +#include "random-util.h" #include "string-util.h" static void test_hexchar(void) { @@ -275,6 +276,37 @@ static void test_base64mem(void) { free(b64); } +static void test_base64mem_linebreak(void) { + uint8_t data[4096]; + + for (size_t i = 0; i < 20; i++) { + _cleanup_free_ char *encoded = NULL; + _cleanup_free_ void *decoded = NULL; + size_t decoded_size; + uint64_t n, m; + ssize_t l; + + /* Try a bunch of differently sized blobs */ + n = random_u64_range(sizeof(data)); + random_bytes(data, n); + + /* Break at various different columns */ + m = 1 + random_u64_range(n + 5); + + l = base64mem_full(data, n, m, &encoded); + assert_se(l >= 0); + assert_se(encoded); + assert_se((size_t) l == strlen(encoded)); + + assert_se(unbase64mem(encoded, SIZE_MAX, &decoded, &decoded_size) >= 0); + assert_se(decoded_size == n); + assert_se(memcmp(data, decoded, n) == 0); + + for (size_t j = 0; j < (size_t) l; j++) + assert_se((encoded[j] == '\n') == (j % (m + 1) == m)); + } +} + static void test_unbase64mem_one(const char *input, const char *output, int ret) { _cleanup_free_ void *buffer = NULL; size_t size = 0; @@ -348,6 +380,7 @@ int main(int argc, char *argv[]) { test_base32hexmem(); test_unbase32hexmem(); test_base64mem(); + test_base64mem_linebreak(); test_unbase64mem(); test_hexdump(); |