From 772d150a6e82542c06b0c251e73dd299d98d1027 Mon Sep 17 00:00:00 2001 From: Vittorio Giovara Date: Fri, 7 Feb 2014 15:13:40 +0100 Subject: [PATCH] h264: error out from decode_nal_units() when AV_EF_EXPLODE is set Signed-off-by: Vittorio Giovara --- libavcodec/h264.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) 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 */