[FFmpeg-cvslog] avcodec/vp7: Fix null pointer dereference in vp7_decode_frame_header()

Michael Niedermayer git at videolan.org
Thu Mar 27 05:03:25 CET 2014


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Thu Mar 27 04:40:48 2014 +0100| [57e939d963800f8e6977d0238e6116c7d1b53315] | committer: Michael Niedermayer

avcodec/vp7: Fix null pointer dereference in vp7_decode_frame_header()

This simply copies the "interframe without a prior keyframe" check
thats done later into vp7_decode_frame_header()

Found-by: Vittorio Giovara <vittorio.giovara at gmail.com>
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=57e939d963800f8e6977d0238e6116c7d1b53315
---

 libavcodec/vp8.c |    7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c
index 0c2f503..45a19a0 100644
--- a/libavcodec/vp8.c
+++ b/libavcodec/vp8.c
@@ -521,6 +521,13 @@ static int vp7_decode_frame_header(VP8Context *s, const uint8_t *buf, int buf_si
         int alpha = (int8_t)vp8_rac_get_uint(c, 8);
         int beta  = (int8_t)vp8_rac_get_uint(c, 8);
         if (!s->keyframe && (alpha || beta)) {
+
+            if (!s->framep[VP56_FRAME_PREVIOUS] ||
+                !s->framep[VP56_FRAME_GOLDEN]) {
+                av_log(s->avctx, AV_LOG_WARNING, "Discarding interframe without a prior keyframe!\n");
+                return AVERROR_INVALIDDATA;
+            }
+
             /* preserve the golden frame */
             if (s->framep[VP56_FRAME_GOLDEN] == s->framep[VP56_FRAME_PREVIOUS]) {
                 AVFrame *gold = s->framep[VP56_FRAME_GOLDEN]->tf.f;



More information about the ffmpeg-cvslog mailing list