vulkan_h264: check if slices_buf exists on end_frame

The issue is that while decode_slice is guaranteed to never get
called without start_frame, end_frame is not. Moreover, it is
not guaranteed it won't be called twice.

On a badly-broken sample, this is what happens, which leads to
a segfault, as vp->slices_buf doesn't exist, as it has been handed
off for decoding already and isn't owned by the frame.

Return an error as it's indicative that it's a corrupt stream rather
than just missing any slices.

Prevents a segfault.
This commit is contained in:
Lynne 2023-06-25 02:42:29 +02:00
parent 10f1bbfe11
commit c39e861a3d
No known key found for this signature in database
GPG Key ID: A2FEA5F03F034464
1 changed files with 3 additions and 0 deletions

View File

@ -520,6 +520,9 @@ static int vk_h264_end_frame(AVCodecContext *avctx)
if (!hp->h264_pic_info.sliceCount) if (!hp->h264_pic_info.sliceCount)
return 0; return 0;
if (!vp->slices_buf)
return AVERROR(EINVAL);
if (!dec->session_params) { if (!dec->session_params) {
int err = vk_h264_create_params(avctx, &dec->session_params); int err = vk_h264_create_params(avctx, &dec->session_params);
if (err < 0) if (err < 0)