From c4709342367d95d9cfb8a9355e7e66eca74b68d5 Mon Sep 17 00:00:00 2001 From: Guido Cella Date: Fri, 13 Oct 2023 10:12:46 +0200 Subject: command: fix segfault with playlist-{next,prev}-playlist This was wrongly assuming that playlist_path is always set for the current playlist entry, but it's only set when a file was added by expanding a playlist. The crash in playlist_get_first_in_next_playlist can be reproduced with mpv foo.mkv foo.zip, playlist-next, playlist-prev, playlist-next-playlist. You need to run playlist-next, playlist-prev first because foo.zip's playlist_path is NULL until you do that, which makes playlist_get_first_in_next_playlist return immediately. The crash in cmd_playlist_next_prev_playlist can be replicated with mpv --loop-playlist foo.zip foo.mkv, running playlist-next until foo.mkv, and playlist-play-next. Again, you need to open foo.zip first or its playlist_path is NULL which skips running strcmp(entry->playlist_path, mpctx->playlist->current->playlist_path). Fixes https://github.com/mpv-player/mpv/issues/12495#issuecomment-1760968608 --- common/playlist.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'common/playlist.c') diff --git a/common/playlist.c b/common/playlist.c index e79a96b402..c1636bc695 100644 --- a/common/playlist.c +++ b/common/playlist.c @@ -221,7 +221,7 @@ struct playlist_entry *playlist_get_first_in_next_playlist(struct playlist *pl, if (!entry) return NULL; - while (entry && entry->playlist_path && + while (entry && entry->playlist_path && pl->current->playlist_path && strcmp(entry->playlist_path, pl->current->playlist_path) == 0) entry = playlist_entry_get_rel(entry, direction); -- cgit v1.2.3