# HG changeset patch # User jbr # Date 1206571001 0 # Node ID b8f886bce6f56c5929a76ffd561bcdf03e956b42 # Parent ea2f7235c3e1f3cf707d95c7c526f044d5c98c94 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0. diff -r ea2f7235c3e1 -r b8f886bce6f5 ac3dec.c --- a/ac3dec.c Tue Mar 25 23:34:49 2008 +0000 +++ b/ac3dec.c Wed Mar 26 22:36:41 2008 +0000 @@ -194,7 +194,7 @@ GetBitContext gbc; ///< bitstream reader AVRandomState dith_state; ///< for dither generation AVCodecContext *avctx; ///< parent context - uint8_t input_buffer[AC3_MAX_FRAME_SIZE]; ///< temp buffer to prevent overread + uint8_t *input_buffer; ///< temp buffer to prevent overread } AC3DecodeContext; /** @@ -294,6 +294,13 @@ } s->downmixed = 1; + /* allocate context input buffer */ + if (avctx->error_resilience >= FF_ER_CAREFUL) { + s->input_buffer = av_mallocz(AC3_MAX_FRAME_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); + if (!s->input_buffer) + return AVERROR_NOMEM; + } + return 0; } @@ -1137,7 +1144,7 @@ int i, blk, ch, err; /* initialize the GetBitContext with the start of valid AC-3 Frame */ - if(avctx->error_resilience >= FF_ER_CAREFUL) { + if (s->input_buffer) { /* copy input buffer to decoder context to avoid reading past the end of the buffer, which can be caused by a damaged input stream. */ memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_MAX_FRAME_SIZE)); @@ -1229,6 +1236,8 @@ ff_mdct_end(&s->imdct_512); ff_mdct_end(&s->imdct_256); + av_freep(&s->input_buffer); + return 0; }