aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/alac.c
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2013-09-28 00:22:52 +0300
committerMartin Storsjö <martin@martin.st>2013-09-29 19:57:10 +0300
commit59480abce7e4238e22b3a4a904a9fe6abf4e4188 (patch)
treeb057edacec3513d1749330a8c2c6679a080df265 /libavcodec/alac.c
parentadc09136a4a63b152630abeacb22c56541eacf60 (diff)
downloadffmpeg-59480abce7e4238e22b3a4a904a9fe6abf4e4188.tar.gz
alac: Do bounds checking of lpc_order read from the bitstream
In lpc_prediction(), we write up to array element 'lpc_order' in an array allocated to hold 'max_samples_per_frame' elements. Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind CC: libav-stable@libav.org Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavcodec/alac.c')
-rw-r--r--libavcodec/alac.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/libavcodec/alac.c b/libavcodec/alac.c
index 41d1f772e8..6d1ace36c4 100644
--- a/libavcodec/alac.c
+++ b/libavcodec/alac.c
@@ -314,6 +314,9 @@ static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index,
rice_history_mult[ch] = get_bits(&alac->gb, 3);
lpc_order[ch] = get_bits(&alac->gb, 5);
+ if (lpc_order[ch] >= alac->max_samples_per_frame)
+ return AVERROR_INVALIDDATA;
+
/* read the predictor table */
for (i = lpc_order[ch] - 1; i >= 0; i--)
lpc_coefs[ch][i] = get_sbits(&alac->gb, 16);