A reader left open may lead to hangs.

Signed-off-by: Vittorio Giovara <[email protected]>
---
 libavcodec/mpeg12dec.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
index 711b310..1e1e4a5 100644
--- a/libavcodec/mpeg12dec.c
+++ b/libavcodec/mpeg12dec.c
@@ -170,7 +170,8 @@ static inline int mpeg1_decode_block_intra(MpegEncContext 
*s,
                 break;
             } else if (level != 0) {
                 i += run;
-                check_scantable_index(s, i);
+                if (i > 63)
+                    break;
                 j = scantable[i];
                 level = (level * qscale * quant_matrix[j]) >> 4;
                 level = (level - 1) | 1;
@@ -192,7 +193,8 @@ static inline int mpeg1_decode_block_intra(MpegEncContext 
*s,
                     LAST_SKIP_BITS(re, &s->gb, 8);
                 }
                 i += run;
-                check_scantable_index(s, i);
+                if (i > 63)
+                    break;
                 j = scantable[i];
                 if (level < 0) {
                     level = -level;
@@ -209,6 +211,9 @@ static inline int mpeg1_decode_block_intra(MpegEncContext 
*s,
         }
         CLOSE_READER(re, &s->gb);
     }
+
+    check_scantable_index(s, i);
+
     s->block_last_index[n] = i;
     return 0;
 }
-- 
2.6.4

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to