summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2011-03-22 14:11:34 -0400
committerJustin Ruggles <justin.ruggles@gmail.com>2011-03-22 15:36:47 -0400
commit67fc8652b9866978cdd6b49ecd293f2891466058 (patch)
tree62ec1e457187cc9b0271e30e12c1d7665b54a511
parent85ab2904700c5bf8b55a33ad598191e36318e195 (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>
-rw-r--r--libavcodec/ac3dec.c9
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;