From b73549f6c4f13e8ef5cadebbc767829aea5a2c16 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 26 Oct 2020 14:06:55 +0100 Subject: [PATCH] Catch more errors when non-CPLs are loaded as CPLs. --- src/wx/kdm_cpl_panel.cc | 48 ++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/wx/kdm_cpl_panel.cc b/src/wx/kdm_cpl_panel.cc index 8b4d93129..aaf88f713 100644 --- a/src/wx/kdm_cpl_panel.cc +++ b/src/wx/kdm_cpl_panel.cc @@ -22,6 +22,7 @@ #include "wx_util.h" #include "static_text.h" #include "dcpomatic_button.h" +#include #include #include @@ -106,33 +107,33 @@ KDMCPLPanel::cpl_browse_clicked () d->Destroy (); - /* XXX: hack alert */ - cxml::Document cpl_document ("CompositionPlaylist"); - cpl_document.read_file (cpl_file); - - bool encrypted = false; - BOOST_FOREACH (cxml::ConstNodePtr i, cpl_document.node_children("ReelList")) { - BOOST_FOREACH (cxml::ConstNodePtr j, i->node_children("Reel")) { - BOOST_FOREACH (cxml::ConstNodePtr k, j->node_children("AssetList")) { - BOOST_FOREACH (cxml::ConstNodePtr l, k->node_children()) { - if (!l->node_children("KeyId").empty()) { - encrypted = true; + try { + /* XXX: hack alert */ + cxml::Document cpl_document ("CompositionPlaylist"); + cpl_document.read_file (cpl_file); + + bool encrypted = false; + BOOST_FOREACH (cxml::ConstNodePtr i, cpl_document.node_children("ReelList")) { + BOOST_FOREACH (cxml::ConstNodePtr j, i->node_children("Reel")) { + BOOST_FOREACH (cxml::ConstNodePtr k, j->node_children("AssetList")) { + BOOST_FOREACH (cxml::ConstNodePtr l, k->node_children()) { + if (!l->node_children("KeyId").empty()) { + encrypted = true; + } } } } } - } - if (!encrypted) { - error_dialog (this, _("This CPL contains no encrypted assets.")); - return; - } + if (!encrypted) { + error_dialog (this, _("This CPL contains no encrypted assets.")); + return; + } - /* We're ignoring the CPLSummary timestamp stuff here and just putting the new one in at the end - of the list, then selecting it. - */ + /* We're ignoring the CPLSummary timestamp stuff here and just putting the new one in at the end + of the list, then selecting it. + */ - try { _cpls.push_back ( CPLSummary ( dcp_dir.filename().string(), @@ -143,8 +144,11 @@ KDMCPLPanel::cpl_browse_clicked () 0 ) ); - } catch (cxml::Error &) { - error_dialog (this, _("This is not a valid CPL file")); + } catch (xmlpp::exception& e) { + error_dialog (this, _("This is not a valid CPL file"), std_to_wx(e.what())); + return; + } catch (cxml::Error& e) { + error_dialog (this, _("This is not a valid CPL file"), std_to_wx(e.what())); return; } -- 2.30.2