[FFmpeg-devel] [PATCH] alsdec: error out if channel number changes
Andreas Cadhalpun
andreas.cadhalpun at googlemail.com
Mon Jan 4 16:18:59 CET 2016
Supporting this would require re-initialization to change buffer sizes.
This fixes out of bounds reads.
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
---
libavcodec/alsdec.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c
index ebd364e..5efa0cc 100644
--- a/libavcodec/alsdec.c
+++ b/libavcodec/alsdec.c
@@ -193,6 +193,7 @@ typedef struct ALSDecContext {
ALSSpecificConfig sconf;
GetBitContext gb;
BswapDSPContext bdsp;
+ int channels;
const AVCRC *crc_table;
uint32_t crc_org; ///< CRC value of the original input data
uint32_t crc; ///< CRC value calculated from decoded data
@@ -1515,6 +1516,13 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr,
int invalid_frame, ret;
unsigned int c, sample, ra_frame, bytes_read, shift;
+ if (avctx->channels != ctx->channels) {
+ av_log(avctx, AV_LOG_ERROR,
+ "Changing the number of channels from %d to %d requires re-initialization.\n",
+ ctx->channels, avctx->channels);
+ return AVERROR_PATCHWELCOME;
+ }
+
if ((ret = init_get_bits8(&ctx->gb, buffer, buffer_size)) < 0)
return ret;
@@ -1793,6 +1801,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
channel_size = sconf->frame_length + sconf->max_order;
+ ctx->channels = avctx->channels;
ctx->prev_raw_samples = av_malloc_array(sconf->max_order, sizeof(*ctx->prev_raw_samples));
ctx->raw_buffer = av_mallocz_array(avctx->channels * channel_size, sizeof(*ctx->raw_buffer));
ctx->raw_samples = av_malloc_array(avctx->channels, sizeof(*ctx->raw_samples));
--
2.6.4
More information about the ffmpeg-devel
mailing list