diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-06-24 01:45:59 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-06-24 01:46:30 +0200 |
commit | 82e4340f1ef0dba67ca9e264a400aec895293dfe (patch) | |
tree | 1553dcbd7fb5cd4c4cc7e0ab6d9c49f446e7fa75 /libavcodec/h264.c | |
parent | 97511bc7cf443ffd6b8738f8f290422a0e3b23e5 (diff) | |
parent | 772d150a6e82542c06b0c251e73dd299d98d1027 (diff) | |
download | ffmpeg-82e4340f1ef0dba67ca9e264a400aec895293dfe.tar.gz |
Merge commit '772d150a6e82542c06b0c251e73dd299d98d1027'
* commit '772d150a6e82542c06b0c251e73dd299d98d1027':
h264: error out from decode_nal_units() when AV_EF_EXPLODE is set
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/h264.c')
-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 2348d53120..561fcb2622 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -1683,7 +1683,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); @@ -1702,7 +1704,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: @@ -1719,7 +1723,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; } @@ -1739,8 +1745,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 */ |