Browse Source

Merge commit '488f87be873506abb01d67708a67c10a4dd29283'

* commit '488f87be873506abb01d67708a67c10a4dd29283':
  roqvideodec: check dimensions validity
  vqavideo: check chunk sizes before reading chunks
  qdm2: check array index before use, fix out of array accesses

Conflicts:
	libavcodec/qdm2.c
	libavcodec/roqvideodec.c
	libavcodec/vqavideo.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
tags/n1.2
Michael Niedermayer 13 years ago
parent
commit
96008082db
3 changed files with 9 additions and 6 deletions
  1. +1
    -1
      libavcodec/qdm2.c
  2. +4
    -3
      libavcodec/roqvideodec.c
  3. +4
    -2
      libavcodec/vqavideo.c

+ 1
- 1
libavcodec/qdm2.c View File

@@ -1257,7 +1257,7 @@ static void qdm2_decode_super_block (QDM2Context *q)
for (i = 0; packet_bytes > 0; i++) {
int j;

if (i>=FF_ARRAY_ELEMS(q->sub_packet_list_A)) {
if (i >= FF_ARRAY_ELEMS(q->sub_packet_list_A)) {
SAMPLES_NEEDED_2("too many packet bytes");
return;
}


+ 4
- 3
libavcodec/roqvideodec.c View File

@@ -171,9 +171,10 @@ static av_cold int roq_decode_init(AVCodecContext *avctx)

s->avctx = avctx;

if (avctx->width%16 || avctx->height%16) {
av_log_ask_for_sample(avctx, "dimensions not being a multiple of 16 are unsupported\n");
return AVERROR_PATCHWELCOME;
if (avctx->width % 16 || avctx->height % 16) {
av_log(avctx, AV_LOG_ERROR,
"Dimensions must be a multiple of 16\n");
return AVERROR_PATCHWELCOME;
}

s->width = avctx->width;


+ 4
- 2
libavcodec/vqavideo.c View File

@@ -538,7 +538,8 @@ static int vqa_decode_chunk(VqaContext *s)
chunk_size = bytestream2_get_be32(&s->gb);

if (chunk_size > MAX_CODEBOOK_SIZE - s->next_codebook_buffer_index) {
av_log(s->avctx, AV_LOG_ERROR, "cbp0 chunk too large (0x%X bytes)\n", chunk_size);
av_log(s->avctx, AV_LOG_ERROR, "cbp0 chunk too large (%u bytes)\n",
chunk_size);
return AVERROR_INVALIDDATA;
}

@@ -566,7 +567,8 @@ static int vqa_decode_chunk(VqaContext *s)
chunk_size = bytestream2_get_be32(&s->gb);

if (chunk_size > MAX_CODEBOOK_SIZE - s->next_codebook_buffer_index) {
av_log(s->avctx, AV_LOG_ERROR, "cbpz chunk too large (0x%X bytes)\n", chunk_size);
av_log(s->avctx, AV_LOG_ERROR, "cbpz chunk too large (%u bytes)\n",
chunk_size);
return AVERROR_INVALIDDATA;
}



Loading…
Cancel
Save