From 9418451a31c7a27b0c777061605200e5d68112cb Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Sat, 4 Oct 2014 16:35:23 +0200 Subject: [PATCH] actions: fix actions that crash the program if invoked with empty playlist --- src/actions.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/actions.cpp b/src/actions.cpp index 2da7d143..649aebfe 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -380,6 +380,8 @@ void ScrollUpArtist::run() { auto pl = proxySongList(myScreen); assert(pl); + if (pl.empty()) + return; size_t pos = pl.choice(); if (MPD::Song *s = pl.getSong(pos)) { @@ -403,6 +405,8 @@ void ScrollUpAlbum::run() { auto pl = proxySongList(myScreen); assert(pl); + if (pl.empty()) + return; size_t pos = pl.choice(); if (MPD::Song *s = pl.getSong(pos)) { @@ -426,6 +430,8 @@ void ScrollDownArtist::run() { auto pl = proxySongList(myScreen); assert(pl); + if (pl.empty()) + return; size_t pos = pl.choice(); if (MPD::Song *s = pl.getSong(pos)) { @@ -449,6 +455,8 @@ void ScrollDownAlbum::run() { auto pl = proxySongList(myScreen); assert(pl); + if (pl.empty()) + return; size_t pos = pl.choice(); if (MPD::Song *s = pl.getSong(pos)) { @@ -931,7 +939,10 @@ bool MoveSelectedItemsTo::canBeRun() const void MoveSelectedItemsTo::run() { if (myScreen == myPlaylist) - moveSelectedItemsTo(myPlaylist->main(), boost::bind(&MPD::Connection::Move, _1, _2, _3)); + { + if (!myPlaylist->main().empty()) + moveSelectedItemsTo(myPlaylist->main(), boost::bind(&MPD::Connection::Move, _1, _2, _3)); + } else { assert(!myPlaylistEditor->Playlists.empty()); @@ -1142,7 +1153,11 @@ void TogglePlayingSongCentering::run() if (Config.autocenter_mode && Status::State::player() != MPD::psUnknown && !myPlaylist->main().isFiltered()) - myPlaylist->main().highlight(Status::State::currentSongPosition()); + { + auto sp = Status::State::currentSongPosition(); + if (sp >= 0 && size_t(sp) < myPlaylist->main().size()) + myPlaylist->main().highlight(Status::State::currentSongPosition()); + } } void UpdateDatabase::run() @@ -1691,6 +1706,9 @@ bool SelectAlbum::canBeRun() const void SelectAlbum::run() { auto pl = proxySongList(myScreen); + assert(pl); + if (pl.empty()) + return; size_t pos = pl.choice(); if (MPD::Song *s = pl.getSong(pos)) {