diff options
author | Max Kellermann <max@musicpd.org> | 2020-10-28 16:04:24 +0100 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2020-10-28 16:06:52 +0100 |
commit | 7b9295ff99f366fec9ba2ea0a12ed17b05b0af7c (patch) | |
tree | 549a0866623b656c349f760b517da4fb38765af4 | |
parent | 5f61d440eb4a3a5647b1b04b5725abe7e020535a (diff) |
lib/yajl/Handle: strip newlines from error messages
Closes https://github.com/MusicPlayerDaemon/MPD/issues/981
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | src/lib/yajl/Handle.cxx | 22 |
2 files changed, 25 insertions, 1 deletions
@@ -2,6 +2,10 @@ ver 0.22.2 (not yet released) * database - simple: purge songs and virtual directories for unavailable plugins on update +* input + - qobuz/tidal: fix protocol errors due to newlines in error messages +* playlist + - soundcloud: fix protocol errors due to newlines in error messages * state_file: save on shutdown ver 0.22.1 (2020/10/17) diff --git a/src/lib/yajl/Handle.cxx b/src/lib/yajl/Handle.cxx index fbfc8ac02..6a1741b10 100644 --- a/src/lib/yajl/Handle.cxx +++ b/src/lib/yajl/Handle.cxx @@ -30,6 +30,24 @@ #include "Handle.hxx" #include "util/RuntimeError.hxx" #include "util/ScopeExit.hxx" +#include "util/StringStrip.hxx" + +#include <cstring> + +/** + * Strip whitespace at the beginning and end and replace newline + * characters which are illegal in the MPD protocol. + */ +static const char * +StripErrorMessage(char *s) noexcept +{ + s = Strip(s); + + while (auto newline = std::strchr(s, '\n')) + *newline = ';'; + + return s; +} namespace Yajl { @@ -41,7 +59,9 @@ Handle::ThrowError() AtScopeExit(this, str) { yajl_free_error(handle, str); }; - throw FormatRuntimeError("Failed to parse JSON: %s", str); + + throw FormatRuntimeError("Failed to parse JSON: %s", + StripErrorMessage((char *)str)); } } // namespace Yajl |