Browse Source

rv34: Check for invalid slice offsets

Signed-off-by: Martin Storsjö <martin@martin.st>
tags/n0.9
Laurent Aimar Martin Storsjö 14 years ago
parent
commit
4cc7732386
1 changed files with 5 additions and 4 deletions
  1. +5
    -4
      libavcodec/rv34.c

+ 5
- 4
libavcodec/rv34.c View File

@@ -1488,8 +1488,9 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
slice_count = avctx->slice_count;

//parse first slice header to check whether this frame can be decoded
if(get_slice_offset(avctx, slices_hdr, 0) > buf_size){
av_log(avctx, AV_LOG_ERROR, "Slice offset is greater than frame size\n");
if(get_slice_offset(avctx, slices_hdr, 0) < 0 ||
get_slice_offset(avctx, slices_hdr, 0) > buf_size){
av_log(avctx, AV_LOG_ERROR, "Slice offset is invalid\n");
return -1;
}
init_get_bits(&s->gb, buf+get_slice_offset(avctx, slices_hdr, 0), (buf_size-get_slice_offset(avctx, slices_hdr, 0))*8);
@@ -1512,8 +1513,8 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
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");
if(offset < 0 || offset > buf_size || size < 0){
av_log(avctx, AV_LOG_ERROR, "Slice offset is invalid\n");
break;
}



Loading…
Cancel
Save