decoder/mpcdec: ignore empty frames

https://bugs.musicpd.org/view.php?id=4656 describes a crash due to
division by zero because frame.samples==0.  This should never happen,
but apparently can happen after seeking.  The best we can do is to
just ignore this frame.
This commit is contained in:
Max Kellermann 2017-03-01 16:12:33 +01:00
parent 3b6c285c2a
commit 29a7b2c5b5
2 changed files with 11 additions and 0 deletions

2
NEWS
View File

@ -1,4 +1,6 @@
ver 0.20.6 (not yet released) ver 0.20.6 (not yet released)
* decoder
- mpcdec: fix crash (division by zero) after seeking
ver 0.20.5 (2017/02/20) ver 0.20.5 (2017/02/20)
* tags * tags

View File

@ -207,6 +207,15 @@ mpcdec_decode(DecoderClient &client, InputStream &is)
if (frame.bits == -1) if (frame.bits == -1)
break; break;
if (frame.samples <= 0) {
/* empty frame - this has been observed to
happen spuriously after seeking; skip this
obscure frame, and hope libmpcdec
recovers */
cmd = client.GetCommand();
continue;
}
mpc_uint32_t ret = frame.samples; mpc_uint32_t ret = frame.samples;
ret *= info.channels; ret *= info.channels;