From c00d217a53fc2e9cc15385e2901259fa95f6600e Mon Sep 17 00:00:00 2001 From: lazypingu <126294998+lazypingu@users.noreply.github.com> Date: Mon, 26 Feb 2024 10:35:50 +0100 Subject: [PATCH] Skip track if returned LSNs are negative which indicates track errors or if track is not an audio track --- src/input/plugins/CdioParanoiaInputPlugin.cxx | 10 ++++++++++ 1 file changed, 10 insertions(+) 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(uri, mutex, drv, cdio, reverse_endian,