]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
ast_format_cap_append_by_type: Resolve codec reference leak. 26/1926/4
authorCorey Farrell <git@cfware.com>
Thu, 7 Jan 2016 15:39:19 +0000 (10:39 -0500)
committerCorey Farrell <git@cfware.com>
Thu, 7 Jan 2016 16:51:26 +0000 (10:51 -0600)
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

main/format_cap.c

index 8d6046ab2a8cc90c6a64badaf844ed236a8419a0..17ae18cd472ceab5e7412eff874090572be8e2da 100644 (file)
@@ -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) {