]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: base64 - Add flags parameters to the new high-level decode functions.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 28 Aug 2019 21:34:54 +0000 (23:34 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 10 Sep 2019 07:02:30 +0000 (10:02 +0300)
Cannot change the API of existing functions.

src/lib/base64.c
src/lib/base64.h
src/lib/test-base64.c

index 54f50923a0c8518af62da33f8858ed0cfe6eee43..8e80b48b89c607271753beddebc6a6e01000f996 100644 (file)
@@ -687,12 +687,13 @@ int base64_decode_finish(struct base64_decoder *dec)
  */
 
 int base64_scheme_decode(const struct base64_scheme *b64,
+                        enum base64_decode_flags flags,
                         const void *src, size_t src_size, buffer_t *dest)
 {
        struct base64_decoder dec;
        int ret;
 
-       base64_decode_init(&dec, b64, 0);
+       base64_decode_init(&dec, b64, flags);
        ret = base64_decode_more(&dec, src, src_size, NULL, dest);
        if (ret >= 0)
                ret = base64_decode_finish(&dec);
@@ -701,13 +702,14 @@ int base64_scheme_decode(const struct base64_scheme *b64,
 }
 
 buffer_t *t_base64_scheme_decode_str(const struct base64_scheme *b64,
+                                    enum base64_decode_flags flags,
                                     const char *str)
 {
        buffer_t *buf;
        size_t len = strlen(str);
 
        buf = t_buffer_create(MAX_BASE64_DECODED_SIZE(len));
-       (void)base64_scheme_decode(b64, str, len, buf);
+       (void)base64_scheme_decode(b64, flags, str, len, buf);
        return buf;
 }
 
index 3663041ecd135a9ad167aa0a1cb8a0f287c3b3b5..fb3a257ac1a04f72e886b8c48ddaa7ae5b35d48b 100644 (file)
@@ -219,6 +219,7 @@ base64_scheme_encode(const struct base64_scheme *b64,
    end of line.
  */
 int base64_scheme_decode(const struct base64_scheme *b64,
+                        enum base64_decode_flags flags,
                         const void *src, size_t src_size, buffer_t *dest);
 
 /* Decode given string to a buffer allocated from data stack.
@@ -227,6 +228,7 @@ int base64_scheme_decode(const struct base64_scheme *b64,
    variant. See below for specific functions.
  */
 buffer_t *t_base64_scheme_decode_str(const struct base64_scheme *b64,
+                                    enum base64_decode_flags flags,
                                     const char *str);
 
 /* Returns TRUE if c is a valid encoding character (excluding '=') for the
@@ -262,13 +264,13 @@ base64_decode(const void *src, size_t src_size, size_t *src_pos_r ATTR_UNUSED,
        // NOTE: src_pos_r is deprecated here; to be removed in v2.4 */
        i_assert(src_pos_r == NULL);
 
-       return base64_scheme_decode(&base64_scheme, src, src_size, dest);
+       return base64_scheme_decode(&base64_scheme, 0, src, src_size, dest);
 }
 
 /* Decode given string to a buffer allocated from data stack. */
 static inline buffer_t *t_base64_decode_str(const char *str)
 {
-       return t_base64_scheme_decode_str(&base64_scheme, str);
+       return t_base64_scheme_decode_str(&base64_scheme, 0, str);
 }
 
 /* Returns TRUE if c is a valid base64 encoding character (excluding '=') */
@@ -293,15 +295,18 @@ base64url_encode(const void *src, size_t src_size, buffer_t *dest)
 /* Translates base64url data into binary and appends it to dest buffer. See
    base64_scheme_decode(). */
 static inline int
-base64url_decode(const void *src, size_t src_size, buffer_t *dest)
+base64url_decode(enum base64_decode_flags flags,
+                const void *src, size_t src_size, buffer_t *dest)
 {
-       return base64_scheme_decode(&base64url_scheme, src, src_size, dest);
+       return base64_scheme_decode(&base64url_scheme, flags,
+                                   src, src_size, dest);
 }
 
 /* Decode given string to a buffer allocated from data stack. */
-static inline buffer_t *t_base64url_decode_str(const char *str)
+static inline buffer_t *
+t_base64url_decode_str(enum base64_decode_flags flags, const char *str)
 {
-       return t_base64_scheme_decode_str(&base64url_scheme, str);
+       return t_base64_scheme_decode_str(&base64url_scheme, flags, str);
 }
 
 /* Returns TRUE if c is a valid base64url encoding character (excluding '=') */
index d94500d404c192fb635a2070cd40a898c198093e..8e70d58ffd2a466d7beecb4b7ad03ca38e0d7d8e 100644 (file)
@@ -200,8 +200,8 @@ static void test_base64url_decode(void)
                buffer_create_from_data(&buf, t_malloc0(max_decoded_size),
                                        max_decoded_size);
                str = &buf;
-               ret = base64url_decode(tests[i].input, strlen(tests[i].input),
-                                      str);
+               ret = base64url_decode(0, tests[i].input,
+                                      strlen(tests[i].input), str);
 
                test_assert_idx(tests[i].ret == ret, i);
                test_assert_idx(strlen(tests[i].output) == str_len(str) &&
@@ -234,7 +234,7 @@ static void test_base64url_random(void)
                str_truncate(str, 0);
                str_truncate(dest, 0);
                base64url_encode(buf, max, str);
-               test_assert_idx(base64url_decode(str_data(str), str_len(str),
+               test_assert_idx(base64url_decode(0, str_data(str), str_len(str),
                                                 dest) >= 0, i);
                test_assert_idx(str_len(dest) == max &&
                                memcmp(buf, str_data(dest), max) == 0, i);