diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c index 0994b83f81..41c0964392 100644 --- a/libavcodec/h264dec.c +++ b/libavcodec/h264dec.c @@ -537,8 +537,7 @@ static int get_last_needed_nal(H264Context *h) { int nals_needed = 0; int first_slice = 0; - int i; - int ret; + int i, ret; for (i = 0; i < h->pkt.nb_nals; i++) { H2645NAL *nal = &h->pkt.nals[i]; @@ -556,9 +555,14 @@ static int get_last_needed_nal(H264Context *h) case H264_NAL_DPA: case H264_NAL_IDR_SLICE: case H264_NAL_SLICE: - ret = init_get_bits8(&gb, nal->data + 1, (nal->size - 1)); - if (ret < 0) - return ret; + ret = init_get_bits8(&gb, nal->data + 1, nal->size - 1); + if (ret < 0) { + av_log(h->avctx, AV_LOG_ERROR, "Invalid zero-sized VCL NAL unit\n"); + if (h->avctx->err_recognition & AV_EF_EXPLODE) + return ret; + + break; + } if (!get_ue_golomb_long(&gb) || // first_mb_in_slice !first_slice || first_slice != nal->type)