From 29a7b2c5b58e8da1e78b3744cd3388dc2e4a6f88 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@musicpd.org>
Date: Wed, 1 Mar 2017 16:12:33 +0100
Subject: [PATCH] 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.
---
 NEWS                                        | 2 ++
 src/decoder/plugins/MpcdecDecoderPlugin.cxx | 9 +++++++++
 2 files changed, 11 insertions(+)

diff --git a/NEWS b/NEWS
index 74aeac543..20fd281f9 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,6 @@
 ver 0.20.6 (not yet released)
+* decoder
+  - mpcdec: fix crash (division by zero) after seeking
 
 ver 0.20.5 (2017/02/20)
 * tags
diff --git a/src/decoder/plugins/MpcdecDecoderPlugin.cxx b/src/decoder/plugins/MpcdecDecoderPlugin.cxx
index 08a5a3525..0e58c0098 100644
--- a/src/decoder/plugins/MpcdecDecoderPlugin.cxx
+++ b/src/decoder/plugins/MpcdecDecoderPlugin.cxx
@@ -207,6 +207,15 @@ mpcdec_decode(DecoderClient &client, InputStream &is)
 		if (frame.bits == -1)
 			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;
 		ret *= info.channels;