diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2011-03-22 21:11:34 +0300 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2011-03-22 22:36:47 +0300 |
commit | 67fc8652b9866978cdd6b49ecd293f2891466058 (patch) | |
tree | 62ec1e457187cc9b0271e30e12c1d7665b54a511 /libavcodec/ac3dec.c | |
parent | 85ab2904700c5bf8b55a33ad598191e36318e195 (diff) |
Always copy input data for AC3 decoder.
Depending on error_recognition is not correct, low values do
certainly not mean it is ok to crash.
Based on a patch by Reimar Döffinger <Reimar.Doeffinger@gmx.de>
Diffstat (limited to 'libavcodec/ac3dec.c')
-rw-r--r-- | libavcodec/ac3dec.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index b089adcb21..f19625194d 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -209,11 +209,9 @@ static av_cold int ac3_decode_init(AVCodecContext *avctx) s->downmixed = 1; /* allocate context input buffer */ - if (avctx->error_recognition >= FF_ER_CAREFUL) { s->input_buffer = av_mallocz(AC3_FRAME_BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); if (!s->input_buffer) return AVERROR(ENOMEM); - } avctx->sample_fmt = AV_SAMPLE_FMT_S16; return 0; @@ -1314,15 +1312,12 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, const uint8_t *channel_map; const float *output[AC3_MAX_CHANNELS]; - /* initialize the GetBitContext with the start of valid AC-3 Frame */ - 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_FRAME_BUFFER_SIZE)); - init_get_bits(&s->gbc, s->input_buffer, buf_size * 8); - } else { + buf = s->input_buffer; + /* initialize the GetBitContext with the start of valid AC-3 Frame */ init_get_bits(&s->gbc, buf, buf_size * 8); - } /* parse the syncinfo */ *data_size = 0; |