From ba17363ff71e68d89b64bc6f129460e9056b9de6 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <michaelni@gmx.at> Date: Thu, 25 Aug 2005 00:01:57 +0000 Subject: [PATCH] prevent assert failures and infinite loops with broken streams Originally committed as revision 4538 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/h264.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libavcodec/h264.c b/libavcodec/h264.c index c21d0930d23..40f3c1739a8 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 ); -- GitLab