From 9ed6387c1439a6af45d21de8beb4eb37e3784414 Mon Sep 17 00:00:00 2001
From: Ben Ford <bford@digium.com>
Date: Tue, 4 Aug 2020 14:36:22 -0500
Subject: [PATCH] utils.c: NULL terminate ast_base64decode_string.

With the addition of STIR/SHAKEN, the function ast_base64decode_string
was added for convenience since there is a lot of converting done during
the STIR/SHAKEN process. This function returned the decoded string for
you, but did not NULL terminate it, causing some issues (specifically
with MALLOC_DEBUG). Now, the returned string is NULL terminated, and the
documentation has been updated to reflect this.

Change-Id: Icdd7d05b323b0c47ff6ed43492937a03641bdcf5
---
 include/asterisk/utils.h | 2 +-
 main/utils.c             | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h
index f6280ebdfe..0ee11ee5d5 100644
--- a/include/asterisk/utils.h
+++ b/include/asterisk/utils.h
@@ -267,7 +267,7 @@ int ast_base64decode(unsigned char *dst, const char *src, int max);
  * \brief Same as ast_base64decode, but does the math for you and returns
  * a decoded string
  *
- * \note The returned string will need to be freed later
+ * \note The returned string will need to be freed later and IS NULL terminated
  *
  * \param src The source buffer
  *
diff --git a/main/utils.c b/main/utils.c
index 0b6c649342..827ee2e57a 100644
--- a/main/utils.c
+++ b/main/utils.c
@@ -331,12 +331,13 @@ char *ast_base64decode_string(const char *src)
 	}
 
 	decoded_len = (encoded_len / 4 * 3) - padding;
-	decoded_string = ast_calloc(1, decoded_len);
+	decoded_string = ast_malloc(decoded_len + 1);
 	if (!decoded_string) {
 		return NULL;
 	}
 
 	ast_base64decode(decoded_string, src, decoded_len);
+	decoded_string[decoded_len] = '\0';
 
 	return (char *)decoded_string;
 }
-- 
GitLab