diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-06-06 23:17:29 +0200 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2012-06-07 01:21:52 +0200 |
commit | c9651d4bee36c8d28729622bcf57df8a9e1aa70c (patch) | |
tree | 4d0f3fd7257a48aaa240581dcb8119d059f04227 | |
parent | 1372c826de242fccec8e3d42282ac458a84bb43e (diff) | |
download | ffmpeg-c9651d4bee36c8d28729622bcf57df8a9e1aa70c.tar.gz |
ffplay: fix use after free
reproduceable with:
ffmpeg -i tests/lena.pnm -pix_fmt pal8 -vcodec rawvideo -s 512x512 out.avi
valgrind ffplay_g out.avi
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Signed-off-by: Marton Balint <cus@passwd.hu>
-rw-r--r-- | ffplay.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -1672,10 +1672,11 @@ static int video_thread(void *arg) ret = get_video_frame(is, frame, &pts_int, &pkt); if (ret < 0) goto the_end; - av_free_packet(&pkt); - if (!ret) + if (!ret) { + av_free_packet(&pkt); continue; + } is->frame_last_filter_delay = av_gettime() / 1000000.0 - is->frame_last_returned_time; if (fabs(is->frame_last_filter_delay) > AV_NOSYNC_THRESHOLD / 10.0) @@ -1688,8 +1689,10 @@ static int video_thread(void *arg) last_w, last_h, is->video_st->codec->width, is->video_st->codec->height); avfilter_graph_free(&graph); graph = avfilter_graph_alloc(); - if ((ret = configure_video_filters(graph, is, vfilters)) < 0) + if ((ret = configure_video_filters(graph, is, vfilters)) < 0) { + av_free_packet(&pkt); goto the_end; + } filt_out = is->out_video_filter; last_w = is->video_st->codec->width; last_h = is->video_st->codec->height; @@ -1714,6 +1717,8 @@ static int video_thread(void *arg) } else av_buffersrc_write_frame(filt_in, frame); + av_free_packet(&pkt); + while (ret >= 0) { ret = av_buffersink_get_buffer_ref(filt_out, &picref, 0); if (ret < 0) { |