Mercurial > libavcodec.hg
changeset 11245:1e9ff636c3db libavcodec
Make Bink decoder to stop decoding planes after all bits are used.
This prevents crashes during decoding grayscale Bink files like
samples from Impossible Creatures game demo.
author | kostya |
---|---|
date | Mon, 22 Feb 2010 12:35:12 +0000 |
parents | eb773ca000d9 |
children | b75449aaea3e |
files | bink.c |
diffstat | 1 files changed, 4 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/bink.c Mon Feb 22 12:20:49 2010 +0000 +++ b/bink.c Mon Feb 22 12:35:12 2010 +0000 @@ -681,6 +681,7 @@ DECLARE_ALIGNED_16(DCTELEM, block[64]); DECLARE_ALIGNED_16(uint8_t, ublock[64]); int coordmap[64]; + int bits_count = pkt->size << 3; if(c->pic.data[0]) avctx->release_buffer(avctx, &c->pic); @@ -690,7 +691,7 @@ return -1; } - init_get_bits(&gb, pkt->data, pkt->size*8); + init_get_bits(&gb, pkt->data, bits_count); if (c->version >= 'i') skip_bits_long(&gb, 32); @@ -901,6 +902,8 @@ } if (get_bits_count(&gb) & 0x1F) //next plane data starts at 32-bit boundary skip_bits_long(&gb, 32 - (get_bits_count(&gb) & 0x1F)); + if (get_bits_count(&gb) >= bits_count) + break; } emms_c();