diff mbox series

[FFmpeg-devel,4/8] avcodec/magicyuv: Simplify check for invalid Huffman codes

Message ID 20200831210930.18900-4-andreas.rheinhardt@gmail.com
State Accepted
Commit e8716b7e4c600577f43bd8519dfb30b214830fde
Headers show
Series [FFmpeg-devel,1/8] avcodec/magicyuv: Don't invert Huffman table symbols twice | expand

Checks

Context Check Description
andriy/default pending
andriy/make success Make finished
andriy/make_fate success Make fate finished

Commit Message

Andreas Rheinhardt Aug. 31, 2020, 9:09 p.m. UTC
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
---
 libavcodec/magicyuv.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)
diff mbox series

Patch

diff --git a/libavcodec/magicyuv.c b/libavcodec/magicyuv.c
index 5578374429..f2204f3401 100644
--- a/libavcodec/magicyuv.c
+++ b/libavcodec/magicyuv.c
@@ -459,11 +459,15 @@  static int build_huffman(AVCodecContext *avctx, GetBitContext *gbit, int max)
         int x = get_bits(gbit, 7);
         int l = get_bitsz(gbit, b * 8) + 1;
 
-        for (k = 0; k < l; k++)
-            if (j + k < max)
-                s->len[i][j + k] = x;
+        k = j + l;
+        if (k > max) {
+            av_log(avctx, AV_LOG_ERROR, "Invalid Huffman codes\n");
+            return AVERROR_INVALIDDATA;
+        }
+
+        for (; j < k; j++)
+            s->len[i][j] = x;
 
-        j += l;
         if (j == max) {
             j = 0;
             if (s->huff_build(&s->vlc[i], s->len[i])) {
@@ -474,9 +478,6 @@  static int build_huffman(AVCodecContext *avctx, GetBitContext *gbit, int max)
             if (i == s->planes) {
                 break;
             }
-        } else if (j > max) {
-            av_log(avctx, AV_LOG_ERROR, "Invalid Huffman codes\n");
-            return AVERROR_INVALIDDATA;
         }
     }