format_ogg_vorbis: Clear ogg/vorbis data structures on close
authorSean Bright <sean.bright@gmail.com>
Fri, 14 Apr 2017 17:51:31 +0000 (13:51 -0400)
committerSean Bright <sean.bright@gmail.com>
Sat, 15 Apr 2017 17:15:57 +0000 (12:15 -0500)
On filestream close, we need to clear out the ogg & vorbis data
structures to prevent a memory leak.

ASTERISK-26169 #close
Reported by: Ivan Myalkin

Change-Id: Iee94c5a5d5bdafbf8b181c5c064d15d90ace8274

formats/format_ogg_vorbis.c

index d4212a1..c0f8c19 100644 (file)
@@ -158,6 +158,7 @@ static int ogg_vorbis_rewrite(struct ast_filestream *s,
 
        if (vorbis_encode_init_vbr(&tmp->vi, 1, DEFAULT_SAMPLE_RATE, 0.4)) {
                ast_log(LOG_ERROR, "Unable to initialize Vorbis encoder!\n");
+               vorbis_info_clear(&tmp->vi);
                return -1;
        }
 
@@ -273,6 +274,13 @@ static void ogg_vorbis_close(struct ast_filestream *fs)
                 * and write out the rest of the data */
                vorbis_analysis_wrote(&s->vd, 0);
                write_stream(s, fs->f);
+
+               /* Cleanup */
+               ogg_stream_clear(&s->os);
+               vorbis_block_clear(&s->vb);
+               vorbis_dsp_clear(&s->vd);
+               vorbis_comment_clear(&s->vc);
+               vorbis_info_clear(&s->vi);
        } else {
                /* clear OggVorbis_File handle */
                ov_clear(&s->ov_f);