From d55d2b279460ee106b47602dbc10812ab9eed2eb Mon Sep 17 00:00:00 2001 From: William McPherson Date: Mon, 10 Feb 2020 01:53:10 +1100 Subject: [PATCH] LibAudio/aplay: Handle WAV header errors properly We shouldn't just ASSERT() if the header parse fails. This was crashing Piano completely. --- Libraries/LibAudio/WavLoader.cpp | 5 +++-- Userland/aplay.cpp | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Libraries/LibAudio/WavLoader.cpp b/Libraries/LibAudio/WavLoader.cpp index e100e8f7e7..8412c4eda0 100644 --- a/Libraries/LibAudio/WavLoader.cpp +++ b/Libraries/LibAudio/WavLoader.cpp @@ -40,7 +40,9 @@ WavLoader::WavLoader(const StringView& path) return; } - parse_header(); + if (!parse_header()) + return; + m_resampler = make(m_sample_rate, 44100); } @@ -81,7 +83,6 @@ bool WavLoader::parse_header() #define CHECK_OK(msg) \ do { \ - ASSERT(ok); \ if (stream.handle_read_failure()) { \ m_error_string = String::format("Premature stream EOF at %s", msg); \ return {}; \ diff --git a/Userland/aplay.cpp b/Userland/aplay.cpp index b02ffbb1dd..2b5ba47a0a 100644 --- a/Userland/aplay.cpp +++ b/Userland/aplay.cpp @@ -41,6 +41,10 @@ int main(int argc, char** argv) auto audio_client = Audio::ClientConnection::construct(); audio_client->handshake(); Audio::WavLoader loader(argv[1]); + if (loader.has_error()) { + fprintf(stderr, "Failed to load WAV file: %s\n", loader.error_string()); + return 1; + } printf("\033[34;1m Playing\033[0m: %s\n", argv[1]); printf("\033[34;1m Format\033[0m: %u Hz, %u-bit, %s\n",