diff options
author | Max Kellermann <max@musicpd.org> | 2018-07-21 07:20:59 +0200 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2018-07-21 07:24:42 +0200 |
commit | 821f77325ce8e060247424bb4bd17a5e3db1abb8 (patch) | |
tree | cb163e24c66ff0dc137dfb53f7805c250b7729be /src/command | |
parent | bd8cf7c53d80140f8208d1f6997e5d8d0576524c (diff) |
SongFilter: Parse() throws exception on error
Diffstat (limited to 'src/command')
-rw-r--r-- | src/command/DatabaseCommands.cxx | 40 | ||||
-rw-r--r-- | src/command/QueueCommands.cxx | 8 |
2 files changed, 35 insertions, 13 deletions
diff --git a/src/command/DatabaseCommands.cxx b/src/command/DatabaseCommands.cxx index 9ab41958b..1b6e59769 100644 --- a/src/command/DatabaseCommands.cxx +++ b/src/command/DatabaseCommands.cxx @@ -31,6 +31,7 @@ #include "tag/ParseName.hxx" #include "tag/Mask.hxx" #include "util/ConstBuffer.hxx" +#include "util/Exception.hxx" #include "util/StringAPI.hxx" #include "SongFilter.hxx" #include "BulkEdit.hxx" @@ -96,8 +97,11 @@ handle_match(Client &client, Request args, Response &r, bool fold_case) } SongFilter filter; - if (!filter.Parse(args, fold_case)) { - r.Error(ACK_ERROR_ARG, "incorrect arguments"); + try { + filter.Parse(args, fold_case); + } catch (...) { + r.Error(ACK_ERROR_ARG, + GetFullMessage(std::current_exception()).c_str()); return CommandResult::ERROR; } @@ -126,8 +130,11 @@ static CommandResult handle_match_add(Client &client, Request args, Response &r, bool fold_case) { SongFilter filter; - if (!filter.Parse(args, fold_case)) { - r.Error(ACK_ERROR_ARG, "incorrect arguments"); + try { + filter.Parse(args, fold_case); + } catch (...) { + r.Error(ACK_ERROR_ARG, + GetFullMessage(std::current_exception()).c_str()); return CommandResult::ERROR; } @@ -157,8 +164,11 @@ handle_searchaddpl(Client &client, Request args, Response &r) const char *playlist = args.shift(); SongFilter filter; - if (!filter.Parse(args, true)) { - r.Error(ACK_ERROR_ARG, "incorrect arguments"); + try { + filter.Parse(args, true); + } catch (...) { + r.Error(ACK_ERROR_ARG, + GetFullMessage(std::current_exception()).c_str()); return CommandResult::ERROR; } @@ -187,9 +197,14 @@ handle_count(Client &client, Request args, Response &r) } SongFilter filter; - if (!args.empty() && !filter.Parse(args, false)) { - r.Error(ACK_ERROR_ARG, "incorrect arguments"); - return CommandResult::ERROR; + if (!args.empty()) { + try { + filter.Parse(args, false); + } catch (...) { + r.Error(ACK_ERROR_ARG, + GetFullMessage(std::current_exception()).c_str()); + return CommandResult::ERROR; + } } PrintSongCount(r, client.GetPartition(), "", &filter, group); @@ -255,8 +270,11 @@ handle_list(Client &client, Request args, Response &r) if (!args.empty()) { filter.reset(new SongFilter()); - if (!filter->Parse(args, false)) { - r.Error(ACK_ERROR_ARG, "not able to parse args"); + try { + filter->Parse(args, false); + } catch (...) { + r.Error(ACK_ERROR_ARG, + GetFullMessage(std::current_exception()).c_str()); return CommandResult::ERROR; } } diff --git a/src/command/QueueCommands.cxx b/src/command/QueueCommands.cxx index 3457842c7..89dd885f3 100644 --- a/src/command/QueueCommands.cxx +++ b/src/command/QueueCommands.cxx @@ -35,6 +35,7 @@ #include "Instance.hxx" #include "BulkEdit.hxx" #include "util/ConstBuffer.hxx" +#include "util/Exception.hxx" #include "util/StringAPI.hxx" #include "util/NumberParser.hxx" @@ -264,8 +265,11 @@ handle_playlist_match(Client &client, Request args, Response &r, bool fold_case) { SongFilter filter; - if (!filter.Parse(args, fold_case)) { - r.Error(ACK_ERROR_ARG, "incorrect arguments"); + try { + filter.Parse(args, fold_case); + } catch (...) { + r.Error(ACK_ERROR_ARG, + GetFullMessage(std::current_exception()).c_str()); return CommandResult::ERROR; } |