diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index c21d0930d23f7bb0da3cea64cc4187b57a6be6a3..40f3c1739a8793df9b09c26b9c1553263f10fe0d 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -5363,6 +5363,8 @@ static int decode_cabac_mb_dqp( H264Context *h) {
         else
             ctx = 3;
         val++;
+        if(val > 52) //prevent infinite loop
+            return INT_MIN;
     }
 
     if( val&0x01 )
@@ -6548,7 +6550,7 @@ static void filter_mb( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8
                     bS[0] = bS[1] = bS[2] = bS[3] = 3;
                 } else {
                     // TODO
-                    assert(0);
+                    av_log(h->s.avctx, AV_LOG_ERROR, "both non intra (TODO)\n");
                 }
                 /* Filter edge */
                 // Do not use s->qscale as luma quantizer because it has not the same
@@ -6569,7 +6571,7 @@ static void filter_mb( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8
                     bS[0] = bS[1] = bS[2] = bS[3] = 3;
                 } else {
                     // TODO
-                    assert(0);
+                    av_log(h->s.avctx, AV_LOG_ERROR, "both non intra (TODO)\n");
                 }
                 /* Filter edge */
                 // Do not use s->qscale as luma quantizer because it has not the same
@@ -6701,7 +6703,7 @@ static int decode_slice(H264Context *h){
 
                 if(ret>=0) ret = decode_mb_cabac(h);
 
-                hl_decode_mb(h);
+                if(ret>=0) hl_decode_mb(h);
                 s->mb_y--;
             }
             eos = get_cabac_terminate( &h->cabac );