]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
func_base64.c: Ensure we set aside enough room for base64 encoded data.
authorSean Bright <sean@seanbright.com>
Tue, 8 Oct 2024 19:11:05 +0000 (15:11 -0400)
committerAsterisk Development Team <asteriskteam@digium.com>
Thu, 14 Nov 2024 20:01:34 +0000 (20:01 +0000)
Reported by SingularTricycle on IRC.

Fixes #940

(cherry picked from commit 7c359a2dd347ff6efa674a0f602105de0aa48443)

funcs/func_base64.c

index 136a36147af0d46888b9b8135bcff2e417ef05bf..c9d30b8c0c452951180e53fd668d7dd67dbfe2f0 100644 (file)
@@ -85,7 +85,10 @@ static int base64_helper(struct ast_channel *chan, const char *cmd, char *data,
                        ast_base64encode(buf, (unsigned char *) data, strlen(data), len);
                } else {
                        if (len >= 0) {
-                               ast_str_make_space(str, len ? len : ast_str_strlen(*str) + strlen(data) * 4 / 3 + 2);
+                               /* This calculation accounts for padding and the trailing 0 byte. Borrowed
+                                  from utils.c */
+                               size_t bytes_needed_to_encode_data = ((strlen(data) * 4 / 3 + 3) & ~3) + 1;
+                               ast_str_make_space(str, len ? len : ast_str_strlen(*str) + bytes_needed_to_encode_data);
                        }
                        ast_base64encode(ast_str_buffer(*str) + ast_str_strlen(*str), (unsigned char *) data, strlen(data), ast_str_size(*str) - ast_str_strlen(*str));
                        ast_str_update(*str);