summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Farrell <git@cfware.com>2017-11-06 16:07:01 -0500
committerCorey Farrell <git@cfware.com>2017-11-06 16:12:12 -0500
commitb4240bea6c18c81dba331abb6a42106d4cdc52e0 (patch)
tree3b6ebc4cffb9170ddf3bd0714514e0e4376e8a4d
parentad7860fd194b69a86f43b41d6c20cdb2b653481d (diff)
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
-rw-r--r--main/format_cap.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/main/format_cap.c b/main/format_cap.c
index fc5686652..8a00ed64d 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;