ffmpeg | branch: release/2.6 | Przemysław Sobala <przemyslaw.sob...@grupawp.pl> | Tue Sep 29 15:25:07 2015 +0200| [b0b37e018b384776f76cb1be91fa3e5a5099e8d9] | committer: Carl Eugen Hoyos
lavf/img2dec: Fix memory leak Fixes #4886 Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc> (cherry picked from commit 01dd7e025c246d9001f1a30f4a5d8fa2936d1a5e) > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b0b37e018b384776f76cb1be91fa3e5a5099e8d9 --- libavformat/img2dec.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c index 5fc5b83..046b962 100644 --- a/libavformat/img2dec.c +++ b/libavformat/img2dec.c @@ -442,14 +442,17 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt) } res = av_new_packet(pkt, size[0] + size[1] + size[2]); - if (res < 0) - return res; + if (res < 0) { + goto fail; + } pkt->stream_index = 0; pkt->flags |= AV_PKT_FLAG_KEY; if (s->ts_from_file) { struct stat img_stat; - if (stat(filename, &img_stat)) - return AVERROR(EIO); + if (stat(filename, &img_stat)) { + res = AVERROR(EIO); + goto fail; + } pkt->pts = (int64_t)img_stat.st_mtime; #if HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC if (s->ts_from_file == 2) @@ -483,18 +486,29 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt) if (ret[0] <= 0 || ret[1] < 0 || ret[2] < 0) { av_free_packet(pkt); if (ret[0] < 0) { - return ret[0]; + res = ret[0]; } else if (ret[1] < 0) { - return ret[1]; - } else if (ret[2] < 0) - return ret[2]; - return AVERROR_EOF; + res = ret[1]; + } else if (ret[2] < 0) { + res = ret[2]; + } else { + res = AVERROR_EOF; + } + goto fail; } else { s->img_count++; s->img_number++; s->pts++; return 0; } + +fail: + if (!s->is_pipe) { + for (i = 0; i < 3; i++) { + avio_closep(&f[i]); + } + } + return res; } static int img_read_close(struct AVFormatContext* s1) _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog