diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-06-05 17:23:34 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-06-05 18:34:07 +0200 |
commit | 66c4d544131477cf25d63bf7e2e69c37bd65cba1 (patch) | |
tree | 22abeb077be05d4dcf11a380b3fdb5d5cb6ca9e2 | |
parent | 6e9bfc19bd7be2b28258ca93d706cb67ed482c65 (diff) | |
download | ffmpeg-66c4d544131477cf25d63bf7e2e69c37bd65cba1.tar.gz |
jpeg2000dec: Propagate error code from get_cox() correctly
Without this the context state could become inconsistent
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/jpeg2000dec.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c index c7519c12d8..921362fc12 100644 --- a/libavcodec/jpeg2000dec.c +++ b/libavcodec/jpeg2000dec.c @@ -310,7 +310,7 @@ static int get_cod(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c, uint8_t *properties) { Jpeg2000CodingStyle tmp; - int compno; + int compno, ret; if (bytestream2_get_bytes_left(&s->g) < 5) return AVERROR(EINVAL); @@ -323,7 +323,9 @@ static int get_cod(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c, tmp.nlayers = bytestream2_get_be16u(&s->g); tmp.mct = bytestream2_get_byteu(&s->g); // multiple component transformation - get_cox(s, &tmp); + if ((ret = get_cox(s, &tmp)) < 0) + return ret; + for (compno = 0; compno < s->ncomponents; compno++) if (!(properties[compno] & HAD_COC)) memcpy(c + compno, &tmp, sizeof(tmp)); @@ -335,7 +337,7 @@ static int get_cod(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c, static int get_coc(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c, uint8_t *properties) { - int compno; + int compno, ret; if (bytestream2_get_bytes_left(&s->g) < 2) return AVERROR(EINVAL); @@ -344,7 +346,9 @@ static int get_coc(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c, c += compno; c->csty = bytestream2_get_byteu(&s->g); - get_cox(s, c); + + if ((ret = get_cox(s, c)) < 0) + return ret; properties[compno] |= HAD_COC; return 0; |