]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: base64 - Add asserts to check max_line_len is in valid range
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 6 Oct 2021 23:32:26 +0000 (02:32 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 7 Oct 2021 07:23:08 +0000 (07:23 +0000)
src/lib/base64.c

index 3c7117db85b629dcadf23c56feecfa0251bf84a8..5e4f96a5bcbebd5bd1b0531fb93fa8d1a3a93851 100644 (file)
@@ -38,6 +38,7 @@ uoff_t base64_get_full_encoded_size(struct base64_encoder *enc, uoff_t src_size)
 
        if (out_size > enc->max_line_len) {
                /* newline between each full line */
+               i_assert(enc->max_line_len > 0);
                newlines = (out_size / enc->max_line_len) - 1;
                /* an extra newline to separate the partial last line from the
                   previous full line */
@@ -123,6 +124,7 @@ size_t base64_encode_get_size(struct base64_encoder *enc, size_t src_size)
                size_t line_part, lines;
 
                /* Calculate how many line endings must be added */
+               i_assert(enc->max_line_len > 0);
                lines = out_size / enc->max_line_len;
                line_part = out_size % enc->max_line_len;
                if (enc->cur_line_len > (enc->max_line_len - line_part))
@@ -152,6 +154,7 @@ size_t base64_encode_get_full_space(struct base64_encoder *enc,
 
                /* Calculate how many line endings must be added if all space
                   were used. */
+               i_assert(enc->max_line_len < SIZE_MAX-2);
                max_line_space = enc->max_line_len + (crlf ? 2 : 1);
                lines = dst_space / max_line_space;