[FFmpeg-trac] #2937(avformat:new): avformat_new_stream() memory leak

FFmpeg trac at avcodec.org
Tue Sep 3 21:58:01 CEST 2013


#2937: avformat_new_stream() memory leak
-------------------------------------+-------------------------------------
             Reporter:  jlsantiago0  |                     Type:  defect
               Status:  new          |                 Priority:  important
            Component:  avformat     |                  Version:  git-
             Keywords:  memory leak  |  master
             Blocking:               |               Blocked By:
Analyzed by developer:  0            |  Reproduced by developer:  0
-------------------------------------+-------------------------------------
 avformat_new_stream() calls avcodec_alloc_context3() which can allocate
 data that is not free'd by the manual freeing of the codec context done by
 ff_free_stream() which is called by avformat_free_context(). In particular
 the st->codec->priv_data is allocated, but not free'd. The attached patch
 modifies ff_free_stream() to call avcodec_close() to properly close the
 codec context allocated in avformat_new_stream() .

 For instance in the following code:

 {{{

 AVFormatContext * formatCtx;
 AVCodec * codec;
 AVStream * avStream;
 AVOutputFormat * outputFormat;
 const char * shortName = "mpegts";
 const char * outputURL = "file://somefile.ts";

 outputFormat = av_guess_format(shortName, outputURL, NULL);
 assert(outputFormat != NULL);
 avformat_alloc_output_context2(&formatCtx, outputFormat, shortName,
 outputURL);
 assert(formatCtx != NULL);
 avio_open2(&formatCtx->pb, outputURL, AVIO_FLAG_WRITE, NULL, NULL);
 codec = avcodec_find_decoder(AV_CODEC_ID_H264);
 assert(codec != NULL);
 avStream = avformat_new_stream(formatCtx, codec);
 assert(avStream != NULL);
 avformat_write_header(formatCtx, NULL);
 av_write_trailer(formatCtx);
 avio_close(formatCtx->pb);
 formatCtx->pb = NULL;
 # Not all of the st[]->codec is free'd here.
 avformat_free_context(formatCtx);


 }}}

-- 
Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/2937>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list