avcodec/imc: Check flcoeffs5
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 27 Sep 2013 20:53:24 +0000 (22:53 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 27 Sep 2013 21:13:29 +0000 (23:13 +0200)
Fixes infinite loop
Fixes Ticket2996

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/imc.c

index f4469c4..a72a6df 100644 (file)
@@ -451,8 +451,13 @@ static int bit_allocation(IMCContext *q, IMCChannel *chctx,
     for (i = 0; i < BANDS; i++)
         highest = FFMAX(highest, chctx->flcoeffs1[i]);
 
-    for (i = 0; i < BANDS - 1; i++)
+    for (i = 0; i < BANDS - 1; i++) {
+        if (chctx->flcoeffs5[i] <= 0) {
+            av_log(NULL, AV_LOG_ERROR, "flcoeffs5 %f invalid\n", chctx->flcoeffs5[i]);
+            return AVERROR_INVALIDDATA;
+        }
         chctx->flcoeffs4[i] = chctx->flcoeffs3[i] - log2f(chctx->flcoeffs5[i]);
+    }
     chctx->flcoeffs4[BANDS - 1] = limit;
 
     highest = highest * 0.25;