diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2014-02-07 15:13:40 +0100 |
---|---|---|
committer | Vittorio Giovara <vittorio.giovara@gmail.com> | 2014-06-23 18:58:57 -0400 |
commit | 772d150a6e82542c06b0c251e73dd299d98d1027 (patch) | |
tree | ced16f38a709850850b356313d0680e93f76a9e5 | |
parent | 10306e9c5fcc28bd9310a9b38f21540e9e1433e9 (diff) | |
download | ffmpeg-772d150a6e82542c06b0c251e73dd299d98d1027.tar.gz |
h264: error out from decode_nal_units() when AV_EF_EXPLODE is set
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
-rw-r--r-- | libavcodec/h264.c | 19 |
1 files 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 */ |