From 3e0c78bac63c213649c3e8c2fa49e9f3c9848d5a Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Fri, 27 Sep 2013 22:53:24 +0200
Subject: [PATCH] avcodec/imc: Check flcoeffs5

Fixes infinite loop
Fixes Ticket2996

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
---
 libavcodec/imc.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/libavcodec/imc.c b/libavcodec/imc.c
index f4469c4964a..a72a6dfed12 100644
--- a/libavcodec/imc.c
+++ b/libavcodec/imc.c
@@ -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;
-- 
GitLab