From a6e1c28b9f170d73e1ccdb4416c4a86c23e18e77 Mon Sep 17 00:00:00 2001
From: Oana Stratulat <oanaandreeastratulat@gmail.com>
Date: Mon, 9 Jan 2012 01:34:53 +0200
Subject: [PATCH] fraps: fix crash when multiple versions are found in file

---
 libavcodec/fraps.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c
index de98da7..74eb106 100644
--- a/libavcodec/fraps.c
+++ b/libavcodec/fraps.c
@@ -48,6 +48,7 @@ typedef struct FrapsContext{
     uint8_t *tmpbuf;
     int tmpbuf_size;
     DSPContext dsp;
+    int version;
 } FrapsContext;
 
 
@@ -65,6 +66,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
 
     s->avctx = avctx;
     s->tmpbuf = NULL;
+    s->version = -1;
 
     dsputil_init(&s->dsp, avctx);
 
@@ -143,6 +145,12 @@ static int decode_frame(AVCodecContext *avctx,
 
     header = AV_RL32(buf);
     version = header & 0xff;
+    if (version != s->version && s->version > -1) {
+        av_log(avctx, AV_LOG_INFO, "Multiple versions encountered in file\n");
+        if (s->frame.data[0])
+            avctx->release_buffer(avctx, &s->frame);
+    }
+    s->version = version;
     header_size = (header & (1<<30))? 8 : 4; /* bit 30 means pad to 8 bytes */
 
     if (version > 5) {
-- 
1.7.5.4

