1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-11-23 21:54:53 +02:00

avcodec/h264_refs: Make ff_h264_build_ref_list stricter with AV_EF_EXPLODE

Don't silently skip errors when AV_EF_EXPLODE is specified.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Dale Curtis
2025-08-05 21:45:19 +00:00
committed by Michael Niedermayer
parent 6f9e8a599d
commit 069201c535

View File

@@ -370,6 +370,9 @@ int ff_h264_build_ref_list(H264Context *h, H264SliceContext *sl)
i < 0 ? "reference picture missing during reorder\n" : i < 0 ? "reference picture missing during reorder\n" :
"mismatching reference\n" "mismatching reference\n"
); );
if (h->avctx->err_recognition & AV_EF_EXPLODE) {
return AVERROR_INVALIDDATA;
}
memset(&sl->ref_list[list][index], 0, sizeof(sl->ref_list[0][0])); // FIXME memset(&sl->ref_list[list][index], 0, sizeof(sl->ref_list[0][0])); // FIXME
} else { } else {
for (i = index; i + 1 < sl->ref_count[list]; i++) { for (i = index; i + 1 < sl->ref_count[list]; i++) {
@@ -392,6 +395,10 @@ int ff_h264_build_ref_list(H264Context *h, H264SliceContext *sl)
for (int index = 0; index < sl->ref_count[list]; index++) { for (int index = 0; index < sl->ref_count[list]; index++) {
if ( !sl->ref_list[list][index].parent if ( !sl->ref_list[list][index].parent
|| (!FIELD_PICTURE(h) && (sl->ref_list[list][index].reference&3) != 3)) { || (!FIELD_PICTURE(h) && (sl->ref_list[list][index].reference&3) != 3)) {
if (h->avctx->err_recognition & AV_EF_EXPLODE) {
av_log(h->avctx, AV_LOG_ERROR, "Missing reference picture\n");
return AVERROR_INVALIDDATA;
}
av_log(h->avctx, AV_LOG_ERROR, "Missing reference picture, default is %d\n", h->default_ref[list].poc); av_log(h->avctx, AV_LOG_ERROR, "Missing reference picture, default is %d\n", h->default_ref[list].poc);
for (int i = 0; i < FF_ARRAY_ELEMS(h->last_pocs); i++) for (int i = 0; i < FF_ARRAY_ELEMS(h->last_pocs); i++)