[libav-stable] h264: reset first_field if frame_start() fails for missing refs

Anton Khirnov git at libav.org
Sat Jan 18 20:58:16 CET 2014


Module: libav
Branch: master
Commit: d1b3fabe6945e511bb20fc9ca52b47eb952526ee

Author:    Anton Khirnov <anton at khirnov.net>
Committer: Anton Khirnov <anton at khirnov.net>
Date:      Thu Nov 28 10:54:35 2013 +0100

h264: reset first_field if frame_start() fails for missing refs

In this case we may not have a current frame, while first_field being
set implies we do.

Fixes invalid reads.

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC:libav-stable at libav.org

---

 libavcodec/h264.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 7d49d48..47fb76d 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -3619,8 +3619,11 @@ static int decode_slice_header(H264Context *h, H264Context *h0)
             av_log(h->avctx, AV_LOG_DEBUG, "Frame num gap %d %d\n",
                    h->frame_num, h->prev_frame_num);
             ret = h264_frame_start(h);
-            if (ret < 0)
+            if (ret < 0) {
+                h0->first_field = 0;
                 return ret;
+            }
+
             h->prev_frame_num++;
             h->prev_frame_num        %= 1 << h->sps.log2_max_frame_num;
             h->cur_pic_ptr->frame_num = h->prev_frame_num;



More information about the libav-stable mailing list