Index: libmpc/trunk/libmpcdec/mpc_demux.c
===================================================================
--- libmpc/trunk/libmpcdec/mpc_demux.c	(revision 424)
+++ libmpc/trunk/libmpcdec/mpc_demux.c	(revision 425)
@@ -429,6 +429,8 @@
 		d->si.pns = magic[3] >> 4;
 		if (d->si.stream_version == 7) {
+			mpc_status ret;
 			mpc_demux_fill(d, 6 * 4, MPC_BUFFER_SWAP); // header block size + endian convertion
-			streaminfo_read_header_sv7(&d->si, &d->bits_reader);
+			ret = streaminfo_read_header_sv7(&d->si, &d->bits_reader);
+			if (ret != MPC_STATUS_OK) return ret;
 		} else {
 			return MPC_STATUS_INVALIDSV;
Index: libmpc/trunk/libmpcdec/streaminfo.c
===================================================================
--- libmpc/trunk/libmpcdec/streaminfo.c	(revision 424)
+++ libmpc/trunk/libmpcdec/streaminfo.c	(revision 425)
@@ -51,5 +51,5 @@
     "'BrainDead'", "'quality 9'", "'quality 10'"
 };
-static const mpc_int32_t samplefreqs[4] = { 44100, 48000, 37800, 32000 };
+static const mpc_int32_t samplefreqs[8] = { 44100, 48000, 37800, 32000 };
 
 static const char *
@@ -97,4 +97,12 @@
 }
 
+static mpc_status check_streaminfo(mpc_streaminfo * si)
+{
+	if (si->max_band == 0 || si->max_band > 32
+	    || si->channels > 2)
+		return MPC_STATUS_FILE;
+	return MPC_STATUS_OK;
+}
+
 /// Reads streaminfo from SV7 header.
 mpc_status
@@ -157,5 +165,5 @@
 			*  si->sample_freq / si->samples;
 
-    return MPC_STATUS_OK;
+	return check_streaminfo(si);
 }
 
@@ -206,5 +214,5 @@
 				*  si->sample_freq / (si->samples - si->beg_silence);
 
-	return MPC_STATUS_OK;
+	return check_streaminfo(si);
 }
 
