xan: check size_segment before reading, fixes out of array read.

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
pull/6/merge
Michael Niedermayer 12 years ago
parent a9456c7c5c
commit 0e239b22db
  1. 12
      libavcodec/xan.c

@ -359,17 +359,29 @@ static int xan_wc3_decode_frame(XanContext *s) {
case 9:
case 19:
if (buf_end - size_segment < 1) {
av_log(s->avctx, AV_LOG_ERROR, "size_segment overread\n");
return AVERROR_INVALIDDATA;
}
size = *size_segment++;
break;
case 10:
case 20:
if (buf_end - size_segment < 2) {
av_log(s->avctx, AV_LOG_ERROR, "size_segment overread\n");
return AVERROR_INVALIDDATA;
}
size = AV_RB16(&size_segment[0]);
size_segment += 2;
break;
case 11:
case 21:
if (buf_end - size_segment < 3) {
av_log(s->avctx, AV_LOG_ERROR, "size_segment overread\n");
return AVERROR_INVALIDDATA;
}
size = AV_RB24(size_segment);
size_segment += 3;
break;

Loading…
Cancel
Save