diff options
Diffstat (limited to 'libavcodec/jpeg2000dec.c')
-rw-r--r-- | libavcodec/jpeg2000dec.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c index 6bd9eb01a4..99b6643763 100644 --- a/libavcodec/jpeg2000dec.c +++ b/libavcodec/jpeg2000dec.c @@ -256,6 +256,10 @@ static int get_cox(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c) if (bytestream2_get_bytes_left(&s->g) < 5) return AVERROR(EINVAL); c->nreslevels = bytestream2_get_byteu(&s->g) + 1; // num of resolution levels - 1 + if (c->nreslevels >= JPEG2000_MAX_RESLEVELS) { + av_log(s->avctx, AV_LOG_ERROR, "nreslevels %d is invalid\n", c->nreslevels); + return AVERROR_INVALIDDATA; + } /* compute number of resolution levels to decode */ if (c->nreslevels < s->reduction_factor) @@ -289,6 +293,9 @@ static int get_cox(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c) c->log2_prec_widths[i] = byte & 0x0F; // precinct PPx c->log2_prec_heights[i] = (byte >> 4) & 0x0F; // precinct PPy } + } else { + memset(c->log2_prec_widths , 15, sizeof(c->log2_prec_widths )); + memset(c->log2_prec_heights, 15, sizeof(c->log2_prec_heights)); } return 0; } @@ -303,9 +310,6 @@ static int get_cod(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c, if (bytestream2_get_bytes_left(&s->g) < 5) return AVERROR(EINVAL); - tmp.log2_prec_width = - tmp.log2_prec_height = 15; - tmp.csty = bytestream2_get_byteu(&s->g); // get progression order |