mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-19 11:42:27 +00:00
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
This commit is contained in:
@@ -160,13 +160,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));
|
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 */
|
/* Order doesn't matter for formats, so insert at the head for performance reasons */
|
||||||
ao2_ref(framed, +1);
|
ao2_ref(framed, +1);
|
||||||
AST_LIST_INSERT_HEAD(list, framed, entry);
|
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));
|
cap->framing = MIN(cap->framing, framing ? framing : ast_format_get_default_ms(format));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user