lavc/bink: Chech for malloc failure

Based on commit 8ab2173ed1
This commit is contained in:
James Almer
2013-02-05 22:34:29 -03:00
parent e6324ccfbd
commit 62e5503407

View File

@@ -169,7 +169,7 @@ static void init_lengths(BinkContext *c, int width, int bw)
* *
* @param c decoder context * @param c decoder context
*/ */
static av_cold void init_bundles(BinkContext *c) static av_cold int init_bundles(BinkContext *c)
{ {
int bw, bh, blocks; int bw, bh, blocks;
int i; int i;
@@ -180,8 +180,12 @@ static av_cold void init_bundles(BinkContext *c)
for (i = 0; i < BINKB_NB_SRC; i++) { for (i = 0; i < BINKB_NB_SRC; i++) {
c->bundle[i].data = av_malloc(blocks * 64); c->bundle[i].data = av_malloc(blocks * 64);
if (!c->bundle[i].data)
return AVERROR(ENOMEM);
c->bundle[i].data_end = c->bundle[i].data + blocks * 64; c->bundle[i].data_end = c->bundle[i].data + blocks * 64;
} }
return 0;
} }
/** /**
@@ -1272,7 +1276,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
BinkContext * const c = avctx->priv_data; BinkContext * const c = avctx->priv_data;
static VLC_TYPE table[16 * 128][2]; static VLC_TYPE table[16 * 128][2];
static int binkb_initialised = 0; static int binkb_initialised = 0;
int i; int i, ret;
int flags; int flags;
c->version = avctx->codec_tag >> 24; c->version = avctx->codec_tag >> 24;
@@ -1307,7 +1311,10 @@ static av_cold int decode_init(AVCodecContext *avctx)
ff_dsputil_init(&c->dsp, avctx); ff_dsputil_init(&c->dsp, avctx);
ff_binkdsp_init(&c->bdsp); ff_binkdsp_init(&c->bdsp);
init_bundles(c); if ((ret = init_bundles(c)) < 0) {
free_bundles(c);
return ret;
}
if (c->version == 'b') { if (c->version == 'b') {
if (!binkb_initialised) { if (!binkb_initialised) {