From fa67c2548a75c3788feb12f494ad3f3627257b42 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 27 Sep 2017 17:08:16 +0200 Subject: [PATCH] decoder/Thread: clear the command after catching an exception If an early exception gets caught (e.g. from AllocatedPath::FromUTF8Throw()) before DecoderControl::CommandFinishedLocked() is called, the decoder thread would go in an endless loop, because DecoderCommand::START is still set. Closes #118 --- NEWS | 1 + src/decoder/DecoderThread.cxx | 1 + 2 files changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 92593f54c..3ab0b453b 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ ver 0.20.11 (not yet released) - ffmpeg: more reliable song duration - gme: fix track numbering * fix case insensitive search without libicu +* fix endless loop when accessing malformed file names in ZIP files ver 0.20.10 (2017/08/24) * decoder diff --git a/src/decoder/DecoderThread.cxx b/src/decoder/DecoderThread.cxx index e74ee0f84..7d4a91560 100644 --- a/src/decoder/DecoderThread.cxx +++ b/src/decoder/DecoderThread.cxx @@ -508,6 +508,7 @@ try { decoder_run_song(dc, song, uri_utf8, path_fs); } catch (...) { dc.state = DecoderState::ERROR; + dc.command = DecoderCommand::NONE; dc.error = std::current_exception(); dc.client_cond.signal(); }