From: Corey Farrell Date: Mon, 6 Nov 2017 21:07:01 +0000 (-0500) Subject: format_cap: Fix leak on AST_VECTOR_APPEND error. X-Git-Tag: 13.19.0-rc1~153^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4240bea6c18c81dba331abb6a42106d4cdc52e0;p=thirdparty%2Fasterisk.git 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 --- 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;