From: Stephan Bosch Date: Wed, 28 Aug 2019 21:34:54 +0000 (+0200) Subject: lib: base64 - Add flags parameters to the new high-level decode functions. X-Git-Tag: 2.3.8~121 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d4a8ef0190dac1c68b1b3bd068b9986ffcc82104;p=thirdparty%2Fdovecot%2Fcore.git lib: base64 - Add flags parameters to the new high-level decode functions. Cannot change the API of existing functions. --- diff --git a/src/lib/base64.c b/src/lib/base64.c index 54f50923a0..8e80b48b89 100644 --- a/src/lib/base64.c +++ b/src/lib/base64.c @@ -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; } diff --git a/src/lib/base64.h b/src/lib/base64.h index 3663041ecd..fb3a257ac1 100644 --- a/src/lib/base64.h +++ b/src/lib/base64.h @@ -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 '=') */ diff --git a/src/lib/test-base64.c b/src/lib/test-base64.c index d94500d404..8e70d58ffd 100644 --- a/src/lib/test-base64.c +++ b/src/lib/test-base64.c @@ -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);