summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2021-08-02 16:33:33 +0200
committerMax Kellermann <max@musicpd.org>2021-08-02 16:40:04 +0200
commit9fa3984a2fd9ef6ca4a8843be78592c072e1705e (patch)
tree88728ce8ebc40d663dead1561f785d4a3137bd5b
parent5355335f190016e2611a2029a982755c0cfa817b (diff)
input/icy: adjust offset at end of stream in Read()
ProxyInputStream::Read() assigns the `offset` field, which is the wrong offset because it does not consider Icy metadata removed from the stream. Therefore, after every ProxyInputStream::Read() call, IcyInputStream::Read() needs to override this offset. This was missing at the end of the stream, when Read()==0. Closes https://github.com/MusicPlayerDaemon/MPD/issues/1216
-rw-r--r--NEWS2
-rw-r--r--src/input/IcyInputStream.cxx5
2 files changed, 6 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index e18e3ba81..a9cae45d1 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ ver 0.22.10 (not yet released)
- support "albumart" for virtual tracks in CUE sheets
* database
- simple: fix crash bug
+* input
+ - curl: fix crash bug after stream with Icy metadata was closed by peer
ver 0.22.9 (2021/06/23)
* database
diff --git a/src/input/IcyInputStream.cxx b/src/input/IcyInputStream.cxx
index f24399e85..46ebeaca4 100644
--- a/src/input/IcyInputStream.cxx
+++ b/src/input/IcyInputStream.cxx
@@ -104,8 +104,11 @@ IcyInputStream::Read(std::unique_lock<Mutex> &lock,
while (true) {
size_t nbytes = ProxyInputStream::Read(lock, ptr, read_size);
- if (nbytes == 0)
+ if (nbytes == 0) {
+ assert(IsEOF());
+ offset = override_offset;
return 0;
+ }
size_t result = parser->ParseInPlace(ptr, nbytes);
if (result > 0) {