From 738d6f10409037fbf8aa30cec5aceb121e21e230 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 19 Jan 2014 11:37:42 +0100 Subject: [PATCH] db/proxy: simplify error handling in GetSong() Check mpd_response_finish() before using mpd_song. Don't skip this check even if the mpd_song is non-nullptr. --- src/db/ProxyDatabasePlugin.cxx | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/db/ProxyDatabasePlugin.cxx b/src/db/ProxyDatabasePlugin.cxx index 4b44d9a87..e5e9ac76f 100644 --- a/src/db/ProxyDatabasePlugin.cxx +++ b/src/db/ProxyDatabasePlugin.cxx @@ -440,22 +440,20 @@ ProxyDatabase::GetSong(const char *uri, Error &error) const } struct mpd_song *song = mpd_recv_song(connection); - Song *song2 = song != nullptr - ? Convert(song) - : nullptr; - if (song != nullptr) - mpd_song_free(song); - if (!mpd_response_finish(connection)) { - if (song2 != nullptr) - song2->Free(); - - CheckError(connection, error); + if (!mpd_response_finish(connection) && + !CheckError(connection, error)) { + if (song != nullptr) + mpd_song_free(song); return nullptr; } - if (song2 == nullptr) + if (song == nullptr) { error.Format(db_domain, DB_NOT_FOUND, "No such song: %s", uri); + return nullptr; + } + Song *song2 = Convert(song); + mpd_song_free(song); return song2; }