From 0f9f004c50a8bea6b87d5a1636f95f67066e5187 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 17 Sep 2022 22:31:09 +0200 Subject: [PATCH] Give a better error if a specified CPL does not exist. --- src/lib/dcp_examiner.cc | 10 +++++----- src/lib/exceptions.h | 9 +++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/lib/dcp_examiner.cc b/src/lib/dcp_examiner.cc index 8fa41a8a5..5de8c8905 100644 --- a/src/lib/dcp_examiner.cc +++ b/src/lib/dcp_examiner.cc @@ -72,12 +72,12 @@ DCPExaminer::DCPExaminer (shared_ptr content, bool tolerant) auto cpls = dcp::find_and_resolve_cpls (content->directories(), tolerant); if (content->cpl ()) { - /* Use the CPL that the content was using before */ - for (auto i: cpls) { - if (i->id() == content->cpl().get()) { - cpl = i; - } + /* Use the CPL that was specified, or that the content was using before */ + auto iter = std::find_if(cpls.begin(), cpls.end(), [content](shared_ptr cpl) { return cpl->id() == content->cpl().get(); }); + if (iter == cpls.end()) { + throw CPLNotFoundError(content->cpl().get()); } + cpl = *iter; } else { /* Choose the CPL with the fewest unsatisfied references */ diff --git a/src/lib/exceptions.h b/src/lib/exceptions.h index 7c9509800..618a03f43 100644 --- a/src/lib/exceptions.h +++ b/src/lib/exceptions.h @@ -335,6 +335,15 @@ public: }; +class CPLNotFoundError : public DCPError +{ +public: + CPLNotFoundError(std::string id) + : DCPError(String::compose("CPL %1 not found", id)) + {} +}; + + class InvalidSignerError : public std::runtime_error { public: -- 2.30.2