]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: base64 - Add high-level data decode functions with data stack buffer output.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 28 Aug 2019 22:04:54 +0000 (00:04 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 10 Sep 2019 07:02:30 +0000 (10:02 +0300)
Similar functions accepting C string input already exist.

src/lib/base64.c
src/lib/base64.h

index 8e80b48b89c607271753beddebc6a6e01000f996..5548c612f247fb48c5fa253de0f5055e97f15bfb 100644 (file)
@@ -701,15 +701,14 @@ int base64_scheme_decode(const struct base64_scheme *b64,
        return ret;
 }
 
-buffer_t *t_base64_scheme_decode_str(const struct base64_scheme *b64,
-                                    enum base64_decode_flags flags,
-                                    const char *str)
+buffer_t *t_base64_scheme_decode(const struct base64_scheme *b64,
+                                enum base64_decode_flags flags,
+                                const void *src, size_t src_size)
 {
        buffer_t *buf;
-       size_t len = strlen(str);
 
-       buf = t_buffer_create(MAX_BASE64_DECODED_SIZE(len));
-       (void)base64_scheme_decode(b64, flags, str, len, buf);
+       buf = t_buffer_create(MAX_BASE64_DECODED_SIZE(src_size));
+       (void)base64_scheme_decode(b64, flags, src, src_size, buf);
        return buf;
 }
 
index fb3a257ac1a04f72e886b8c48ddaa7ae5b35d48b..2debd420ad10f325dd4b342e519c4a655e1ae413 100644 (file)
@@ -222,14 +222,25 @@ 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 data to a buffer allocated from data stack.
+
+   The b64 parameter is the definition of the particular Base 64 encoding scheme
+   that is expected. See below for specific functions.
+ */
+buffer_t *t_base64_scheme_decode(const struct base64_scheme *b64,
+                                enum base64_decode_flags flags,
+                                const void *src, size_t src_size);
 /* Decode given string to a buffer allocated from data stack.
 
-   The decmap is the mapping table used for the specific base64 encoding
-   variant. See below for specific functions.
+   The b64 parameter is the definition of the particular Base 64 encoding scheme
+   that is expected. 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);
+static inline buffer_t *
+t_base64_scheme_decode_str(const struct base64_scheme *b64,
+                          enum base64_decode_flags flags, const char *str)
+{
+       return t_base64_scheme_decode(b64, flags, str, strlen(str));
+}
 
 /* Returns TRUE if c is a valid encoding character (excluding '=') for the
    provided base64 mapping table */
@@ -267,6 +278,14 @@ base64_decode(const void *src, size_t src_size, size_t *src_pos_r ATTR_UNUSED,
        return base64_scheme_decode(&base64_scheme, 0, src, src_size, dest);
 }
 
+/* Decode given data to a buffer allocated from data stack. */
+static inline buffer_t *
+t_base64_decode(enum base64_decode_flags flags,
+               const void *src, size_t src_size)
+{
+       return t_base64_scheme_decode(&base64_scheme, flags, src, src_size);
+}
+
 /* Decode given string to a buffer allocated from data stack. */
 static inline buffer_t *t_base64_decode_str(const char *str)
 {
@@ -302,6 +321,14 @@ base64url_decode(enum base64_decode_flags flags,
                                    src, src_size, dest);
 }
 
+/* Decode given data to a buffer allocated from data stack. */
+static inline buffer_t *
+t_base64url_decode(enum base64_decode_flags flags,
+                  const void *src, size_t src_size)
+{
+       return t_base64_scheme_decode(&base64url_scheme, flags, src, src_size);
+}
+
 /* Decode given string to a buffer allocated from data stack. */
 static inline buffer_t *
 t_base64url_decode_str(enum base64_decode_flags flags, const char *str)