summaryrefslogtreecommitdiff
path: root/libavcodec/h264_picture.c
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2021-10-17 13:25:04 -0300
committerJames Almer <jamrial@gmail.com>2021-10-18 10:18:18 -0300
commit762e18da3fe64dbe7d3091fddf99aeee164017cc (patch)
tree478d241b1973cad11cb75854e5f275a4bce8bd91 /libavcodec/h264_picture.c
parent7c08cad280a16b346c0a5e0efdfd8333ec54f095 (diff)
avcodec/h264_picture: don't assume Film Grain Params side data will be present
If a decoding error happens before frame side data is allocated, this assert may be triggered. And since applying film grain is not enforced (we just warn it wasn't applied and move on), we can just do that in such scenarios. Fixes: Assertion failure Fixes: clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_H264_fuzzer-5528650032742400 Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/h264_picture.c')
-rw-r--r--libavcodec/h264_picture.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/libavcodec/h264_picture.c b/libavcodec/h264_picture.c
index 66fd9bc4cb..adf8a32378 100644
--- a/libavcodec/h264_picture.c
+++ b/libavcodec/h264_picture.c
@@ -252,9 +252,11 @@ int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup)
"hardware accelerator failed to decode picture\n");
} else if (!in_setup && cur->needs_fg && (!FIELD_PICTURE(h) || !h->first_field)) {
AVFrameSideData *sd = av_frame_get_side_data(cur->f, AV_FRAME_DATA_FILM_GRAIN_PARAMS);
- av_assert0(sd); // always present if `cur->needs_fg`
- err = ff_h274_apply_film_grain(cur->f_grain, cur->f, &h->h274db,
- (AVFilmGrainParams *) sd->data);
+
+ err = AVERROR_INVALIDDATA;
+ if (sd) // a decoding error may have happened before the side data could be allocated
+ err = ff_h274_apply_film_grain(cur->f_grain, cur->f, &h->h274db,
+ (AVFilmGrainParams *) sd->data);
if (err < 0) {
av_log(h->avctx, AV_LOG_WARNING, "Failed synthesizing film "
"grain, ignoring: %s\n", av_err2str(err));