]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/cavsdec: Check P/B frame mb decode which return error codes
authorMichael Niedermayer <michael@niedermayer.cc>
Sun, 13 Aug 2017 16:44:25 +0000 (18:44 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Mon, 14 Aug 2017 23:27:36 +0000 (01:27 +0200)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/cavsdec.c

index 02b3d213a9686d44a349cc46c9ef1f139f115a74..06c752735eceff846b5b33d2a74b0d07315764f4 100644 (file)
@@ -1090,10 +1090,12 @@ static int decode_pic(AVSContext *h)
             } else {
                 mb_type = get_ue_golomb(&h->gb) + P_SKIP + h->skip_mode_flag;
                 if (mb_type > P_8X8)
-                    decode_mb_i(h, mb_type - P_8X8 - 1);
+                    ret = decode_mb_i(h, mb_type - P_8X8 - 1);
                 else
                     decode_mb_p(h, mb_type);
             }
+            if (ret < 0)
+                break;
         } while (ff_cavs_next_mb(h));
     } else { /* AV_PICTURE_TYPE_B */
         do {
@@ -1102,14 +1104,16 @@ static int decode_pic(AVSContext *h)
             if (h->skip_mode_flag && (skip_count < 0))
                 skip_count = get_ue_golomb(&h->gb);
             if (h->skip_mode_flag && skip_count--) {
-                decode_mb_b(h, B_SKIP);
+                ret = decode_mb_b(h, B_SKIP);
             } else {
                 mb_type = get_ue_golomb(&h->gb) + B_SKIP + h->skip_mode_flag;
                 if (mb_type > B_8X8)
-                    decode_mb_i(h, mb_type - B_8X8 - 1);
+                    ret = decode_mb_i(h, mb_type - B_8X8 - 1);
                 else
-                    decode_mb_b(h, mb_type);
+                    ret = decode_mb_b(h, mb_type);
             }
+            if (ret < 0)
+                break;
         } while (ff_cavs_next_mb(h));
     }
     emms_c();