From b9ef64d4ebb9af44f79433561c7682c43610defc Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Mon, 1 May 2023 00:48:10 +0200 Subject: [PATCH] deps/media-playback: Check if frame can be played before using it It's possible that frame_ready is false when this function is called, which implies that the mp_decode frame field is not valid. However we dereference the frame by counting the number of audio channels before checking the value of frame_ready, causing a crash. --- deps/media-playback/media-playback/media.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/deps/media-playback/media-playback/media.c b/deps/media-playback/media-playback/media.c index 9a052524d..1446643e6 100644 --- a/deps/media-playback/media-playback/media.c +++ b/deps/media-playback/media-playback/media.c @@ -356,15 +356,16 @@ void mp_media_next_audio(mp_media_t *m) struct obs_source_audio audio = {0}; AVFrame *f = d->frame; int channels; + + if (!mp_media_can_play_frame(m, d)) + return; + #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(59, 19, 100) channels = f->channels; #else channels = f->ch_layout.nb_channels; #endif - if (!mp_media_can_play_frame(m, d)) - return; - d->frame_ready = false; if (!m->a_cb) return;