From: Sean Bright Date: Tue, 8 Oct 2024 19:11:05 +0000 (-0400) Subject: func_base64.c: Ensure we set aside enough room for base64 encoded data. X-Git-Tag: 21.6.0-rc1~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b3a0437dec8faa42aed427bdab02cb82d86ba1a3;p=thirdparty%2Fasterisk.git func_base64.c: Ensure we set aside enough room for base64 encoded data. Reported by SingularTricycle on IRC. Fixes #940 (cherry picked from commit 7c359a2dd347ff6efa674a0f602105de0aa48443) --- diff --git a/funcs/func_base64.c b/funcs/func_base64.c index 136a36147a..c9d30b8c0c 100644 --- a/funcs/func_base64.c +++ b/funcs/func_base64.c @@ -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);