]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: test-base64 - Better check output of incrementally encoded random Base64.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 4 Sep 2019 20:52:00 +0000 (22:52 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 10 Sep 2019 07:02:41 +0000 (10:02 +0300)
Check whether it is equal to the same data encoded as a single block and whether
the length matches the base64_get_full_encoded_size() output.

src/lib/test-base64.c

index 5b9b38224d6935e6197d6c1d49162610c41c0c56..b73f5e713ae624bc7e2ee4b4f609397763de1ef9 100644 (file)
@@ -850,6 +850,9 @@ test_base64_random_lowlevel_one_block(const struct base64_scheme *b64,
        base64_encode_more(&enc, in_buf, in_buf_size, NULL, &buf);
        base64_encode_finish(&enc, &buf);
 
+       test_assert(base64_get_full_encoded_size(&enc, in_buf_size) ==
+                   buf1->used);
+
        base64_decode_init(&dec, b64, dec_flags);
        space = buffer_append_space_unsafe(buf2, in_buf_size);
        buffer_create_from_data(&buf, space, in_buf_size);
@@ -881,11 +884,12 @@ test_base64_random_lowlevel_stream(const struct base64_scheme *b64,
        void *out_data;
        buffer_t out;
 
-       buf_begin = in_buf;
-       buf_end = buf_begin + in_buf_size;
+       /* Encode */
 
        buffer_set_used_size(buf1, 0);
-       buffer_set_used_size(buf2, 0);
+
+       buf_begin = in_buf;
+       buf_end = buf_begin + in_buf_size;
 
        base64_encode_init(&enc, b64, enc_flags, max_line_len);
        out_space = 0;
@@ -918,6 +922,21 @@ test_base64_random_lowlevel_stream(const struct base64_scheme *b64,
        }
        base64_encode_finish(&enc, buf1);
 
+       /* Verify encode */
+
+       test_assert(base64_get_full_encoded_size(&enc, in_buf_size) ==
+                   buf1->used);
+
+       buffer_set_used_size(buf2, 0);
+       base64_encode_init(&enc, b64, enc_flags, max_line_len);
+       base64_encode_more(&enc, in_buf, in_buf_size, NULL, buf2);
+       base64_encode_finish(&enc, buf2);
+       test_assert_idx(buffer_cmp(buf1, buf2), test_idx);
+
+       /* Decode */
+
+       buffer_set_used_size(buf2, 0);
+
        buf_begin = buf1->data;
        buf_end = buf_begin + buf1->used;
 
@@ -957,6 +976,7 @@ test_base64_random_lowlevel_stream(const struct base64_scheme *b64,
        }
        test_assert_idx(ret >= 0, test_idx);
 
+       /* Verify decode */
        if (ret > 0) {
                ret = base64_decode_finish(&dec);
                test_assert_idx(ret == 0, test_idx);
@@ -978,7 +998,7 @@ test_base64_random_lowlevel_case(const struct base64_scheme *b64,
        unsigned int i, j;
 
        buf1 = t_buffer_create(MAX_BASE64_ENCODED_SIZE(sizeof(in_buf)));
-       buf2 = t_buffer_create(sizeof(in_buf));
+       buf2 = t_buffer_create(MAX_BASE64_ENCODED_SIZE(sizeof(in_buf)));
 
        /* one block */
        for (i = 0; i < 1000; i++) {