From: Corey Farrell Date: Thu, 7 Jan 2016 15:39:19 +0000 (-0500) Subject: ast_format_cap_append_by_type: Resolve codec reference leak. X-Git-Tag: 13.8.0-rc1~155 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=52e9de001688025669eff569be69b4c9c9191bf5;p=thirdparty%2Fasterisk.git ast_format_cap_append_by_type: Resolve codec reference leak. This resolves a reference leak caused by ASTERISK-25535. The pointer returned by ast_format_get_codec is saved so it can be released. ASTERISK-25664 #close Change-Id: If9941b1bf4320b2c59056546d6bce9422726d1ec --- diff --git a/main/format_cap.c b/main/format_cap.c index 8d6046ab2a..17ae18cd47 100644 --- a/main/format_cap.c +++ b/main/format_cap.c @@ -252,6 +252,7 @@ int ast_format_cap_append_by_type(struct ast_format_cap *cap, enum ast_media_typ for (id = 1; id < ast_codec_get_max(); ++id) { struct ast_codec *codec = ast_codec_get_by_id(id); + struct ast_codec *codec2 = NULL; struct ast_format *format; int res; @@ -272,10 +273,14 @@ int ast_format_cap_append_by_type(struct ast_format_cap *cap, enum ast_media_typ continue; } - if (!format || (codec != ast_format_get_codec(format))) { + if (format) { + codec2 = ast_format_get_codec(format); + } + if (codec != codec2) { ao2_cleanup(format); format = ast_format_create(codec); } + ao2_cleanup(codec2); ao2_ref(codec, -1); if (!format) {