From b4240bea6c18c81dba331abb6a42106d4cdc52e0 Mon Sep 17 00:00:00 2001
From: Corey Farrell <git@cfware.com>
Date: Mon, 6 Nov 2017 16:07:01 -0500
Subject: [PATCH] format_cap: Fix leak on AST_VECTOR_APPEND error.

format_cap_framed_init can fail on AST_VECTOR_APPEND.  This should
report failure to the caller and clean the newly allocated frame.

Change-Id: Ica0661235bf09497bf23d844ceb01f21b41a55b0
---
 main/format_cap.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/main/format_cap.c b/main/format_cap.c
index fc56866526..8a00ed64da 100644
--- a/main/format_cap.c
+++ b/main/format_cap.c
@@ -177,13 +177,16 @@ static inline int format_cap_framed_init(struct format_cap_framed *framed, struc
 	}
 	list = AST_VECTOR_GET_ADDR(&cap->formats, ast_format_get_codec_id(format));
 
+	/* This takes the allocation reference */
+	if (AST_VECTOR_APPEND(&cap->preference_order, framed)) {
+		ao2_ref(framed, -1);
+		return -1;
+	}
+
 	/* Order doesn't matter for formats, so insert at the head for performance reasons */
 	ao2_ref(framed, +1);
 	AST_LIST_INSERT_HEAD(list, framed, entry);
 
-	/* This takes the allocation reference */
-	AST_VECTOR_APPEND(&cap->preference_order, framed);
-
 	cap->framing = MIN(cap->framing, framing ? framing : ast_format_get_default_ms(format));
 
 	return 0;
-- 
GitLab