Check RV30/40 slice offsets to be inside buffer.
authorKostya Shishkov <kostya.shishkov@gmail.com>
Tue, 2 Dec 2008 17:39:20 +0000 (17:39 +0000)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Tue, 2 Dec 2008 17:39:20 +0000 (17:39 +0000)
This fixes issue 738

Originally committed as revision 15981 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/rv34.c

index 297a1a7..ec80035 100644 (file)
@@ -1389,6 +1389,11 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
         else
             size= get_slice_offset(avctx, slices_hdr, i+1) - offset;
 
         else
             size= get_slice_offset(avctx, slices_hdr, i+1) - offset;
 
+        if(offset > buf_size){
+            av_log(avctx, AV_LOG_ERROR, "Slice offset is greater than frame size\n");
+            break;
+        }
+
         r->si.end = s->mb_width * s->mb_height;
         if(i+1 < slice_count){
             init_get_bits(&s->gb, buf+get_slice_offset(avctx, slices_hdr, i+1), (buf_size-get_slice_offset(avctx, slices_hdr, i+1))*8);
         r->si.end = s->mb_width * s->mb_height;
         if(i+1 < slice_count){
             init_get_bits(&s->gb, buf+get_slice_offset(avctx, slices_hdr, i+1), (buf_size-get_slice_offset(avctx, slices_hdr, i+1))*8);