diff --git a/src/input/plugins/CdioParanoiaInputPlugin.cxx b/src/input/plugins/CdioParanoiaInputPlugin.cxx
index 56de50808..b28505502 100644
--- a/src/input/plugins/CdioParanoiaInputPlugin.cxx
+++ b/src/input/plugins/CdioParanoiaInputPlugin.cxx
@@ -264,6 +264,16 @@ input_cdio_open(const char *uri,
 		lsn_to = cdio_cddap_disc_lastsector(drv);
 	}
 
+	/* LSNs < 0 indicate errors (e.g. -401: Invaid track, -402: no pregap) */
+	if(lsn_from < 0 || lsn_to < 0)
+		throw FmtRuntimeError("Error {} on track {}",
+				      lsn_from < 0 ? lsn_from : lsn_to, parsed_uri.track);
+
+	/* Only check for audio track if not pregap or whole CD */
+	if (!cdio_cddap_track_audiop(drv, parsed_uri.track) && parsed_uri.track > 0)
+		throw FmtRuntimeError("No audio track: {}",
+				      parsed_uri.track);
+
 	return std::make_unique<CdioParanoiaInputStream>(uri, mutex,
 							 drv, cdio,
 							 reverse_endian,