]> www.infradead.org Git - users/dwmw2/openconnect.git/commitdiff
Correct calculation of base64 encode buffer length.
authorTom Carroll <incentivedesign@gmail.com>
Tue, 18 May 2021 06:58:23 +0000 (23:58 -0700)
committerTom Carroll <incentivedesign@gmail.com>
Tue, 18 May 2021 06:58:23 +0000 (23:58 -0700)
In the previous formulation, it would first multiple then divide. It would then
promote to unsigned int. The formula would overflow for large len. For example,
needed = 2 when len == INT_MAX. In the revised formulation, it is promoted,
divided, then multiplied. The revised calculation avoids the overflow and
computes needed correctly over len in {0, 1, ..., INT_MAX}.  For len == INT_MAX,
needed is correctly computed as 2863311533.

Signed-off-by: Tom Carroll <incentivedesign@gmail.com>
http-auth.c

index 8c3270b77769fa1c38aa41efd3b71aa076ba56d4..d6e2c6b7982d605622a1e464af0b2695a5e72a37 100644 (file)
@@ -119,7 +119,7 @@ void buf_append_base64(struct oc_text_buf *buf, const void *bytes, int len,
        if (!buf || buf->error)
                return;
 
-       unsigned int needed = (4 * (len + 2) / 3) + 1;
+       unsigned int needed = ((len + 2u) / 3) * 4 + 1;
        if (line_len)
                needed += needed / line_len;