summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorCarl Eugen Hoyos <cehoyos@ag.or.at>2011-12-23 11:38:37 +0100
committerCarl Eugen Hoyos <cehoyos@ag.or.at>2011-12-23 11:38:37 +0100
commite5de9289232c5b14572fa13e2435f9adb0b0f1ec (patch)
tree56807d3001c2ba62a3afc6b286667906017b8879 /libavcodec
parentf810ab45e3be8af96aa8b07154cca1f45bb3e75a (diff)
Fix a possible endless loop when decoding aac.
Fixes ticket #789.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/aacdec.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index c9ca0a66a2..8fd7f08c78 100644
--- a/libavcodec/aacdec.c
+++ b/libavcodec/aacdec.c
@@ -809,10 +809,10 @@ static int decode_band_types(AACContext *ac, enum BandType band_type[120],
av_log(ac->avctx, AV_LOG_ERROR, "invalid band type\n");
return -1;
}
- while ((sect_len_incr = get_bits(gb, bits)) == (1 << bits) - 1)
+ while ((sect_len_incr = get_bits(gb, bits)) == (1 << bits) - 1 && get_bits_left(gb) >= bits)
sect_end += sect_len_incr;
sect_end += sect_len_incr;
- if (get_bits_left(gb) < 0) {
+ if (get_bits_left(gb) < 0 || sect_len_incr == (1 << bits) - 1) {
av_log(ac->avctx, AV_LOG_ERROR, overread_err);
return -1;
}