From 2282ea1f672054af89495359cb102ad1765f108e Mon Sep 17 00:00:00 2001
From: Gabriele Sales <gbrsales@gmail.com>
Date: Wed, 17 Feb 2021 16:18:49 +0100
Subject: [PATCH] Fix test for complete frame in MxPEG decoder

When mb_count is not a multiple of 8, the last byte in
the mxm_bitmask will never have an 0xFF value.
Indeed, only (mb_count % 8) bits will be used to track
which MCUs are included in the frame.

This commit introduces a specific test to be used in case
(mb_count % 8) != 0. It requires that only (mb_count % 8)
bits are set to declare the frame complete.
---
 libavcodec/mxpegdec.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/libavcodec/mxpegdec.c b/libavcodec/mxpegdec.c
index 763ce5871d..5c5b879f22 100644
--- a/libavcodec/mxpegdec.c
+++ b/libavcodec/mxpegdec.c
@@ -128,12 +128,20 @@ static int mxpeg_decode_mxm(MXpegDecodeContext *s,
     s->got_mxm_bitmask = 1;
 
     if (!s->has_complete_frame) {
+        if (mb_count % 8)
+            bitmask_size--;
+
         uint8_t completion_check = 0xFF;
         for (i = 0; i < bitmask_size; ++i) {
             s->completion_bitmask[i] |= s->mxm_bitmask[i];
             completion_check &= s->completion_bitmask[i];
         }
         s->has_complete_frame = !(completion_check ^ 0xFF);
+
+        if (s->has_complete_frame && mb_count % 8) {
+            completion_check = 0xFF << (8 - (mb_count % 8));
+            s->has_complete_frame = !(s->mxm_bitmask[i] ^ completion_check);
+        }
     }
 
     return 0;
-- 
2.30.1

