diff --git a/libavcodec/h264.c b/libavcodec/h264.c index c4ce278c0c..a04839c9c0 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -1593,7 +1593,9 @@ again: break; case NAL_SEI: init_get_bits(&h->gb, ptr, bit_length); - ff_h264_decode_sei(h); + ret = ff_h264_decode_sei(h); + if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE)) + goto end; break; case NAL_SPS: init_get_bits(&h->gb, ptr, bit_length); @@ -1613,7 +1615,9 @@ again: break; case NAL_PPS: init_get_bits(&h->gb, ptr, bit_length); - ff_h264_decode_picture_parameter_set(h, bit_length); + ret = ff_h264_decode_picture_parameter_set(h, bit_length); + if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE)) + goto end; break; case NAL_AUD: case NAL_END_SEQUENCE: @@ -1630,7 +1634,9 @@ again: } if (context_count == h->max_contexts) { - ff_h264_execute_decode_slices(h, context_count); + ret = ff_h264_execute_decode_slices(h, context_count); + if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE)) + goto end; context_count = 0; } @@ -1649,8 +1655,11 @@ again: } } } - if (context_count) - ff_h264_execute_decode_slices(h, context_count); + if (context_count) { + ret = ff_h264_execute_decode_slices(h, context_count); + if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE)) + goto end; + } end: /* clean up */