From 46526573fd6c4e89b4493aae9d1fb05e07c3a0cf Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 17 Apr 2023 18:19:46 +0200 Subject: [PATCH] Fix a buffer overrun when receiving 4K (or 8K etc.) FFmpeg streams. Of course, it would be better to just support this than to throw them away, but at least we avoid a crash. --- nageru/ffmpeg_capture.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/nageru/ffmpeg_capture.cpp b/nageru/ffmpeg_capture.cpp index 9644921..dd053f8 100644 --- a/nageru/ffmpeg_capture.cpp +++ b/nageru/ffmpeg_capture.cpp @@ -1144,6 +1144,16 @@ UniqueFrame FFmpegCapture::make_video_frame(const AVFrame *frame, const string & current_frame_ycbcr_format = decode_ycbcr_format(desc, frame, is_mjpeg, &last_colorspace, &last_chroma_location); } + + // FIXME: Currently, if the video is too high-res for one of the allocated + // frames, we simply refuse to scale it here to avoid crashes. It would be better + // if we could somehow signal getting larger frames, especially as 4K is a thing now. + if (video_frame->len > FRAME_SIZE) { + fprintf(stderr, "%s: Decoded frame would be larger than supported FRAME_SIZE (%zu > %u), not decoding.\n", pathname.c_str(), video_frame->len, FRAME_SIZE); + *error = true; + return video_frame; + } + sws_scale(sws_ctx.get(), frame->data, frame->linesize, 0, frame->height, pic_data, linesizes); return video_frame; -- 2.39.2