func_base64.c: Ensure we set aside enough room for base64 encoded data.

Reported by SingularTricycle on IRC.

Fixes #940

(cherry picked from commit 7d0b342261)
releases/20
Sean Bright 7 months ago committed by Asterisk Development Team
parent edb99e6cc6
commit b1e7d472d6

@ -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);

Loading…
Cancel
Save