diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-10-26 14:06:55 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-10-26 14:06:55 +0100 |
| commit | b73549f6c4f13e8ef5cadebbc767829aea5a2c16 (patch) | |
| tree | f0eac2b3def9d38696b2e3c44afdf63c063d9ddc | |
| parent | 19b6e04b660e8c8c9264119022caea60134625d2 (diff) | |
Catch more errors when non-CPLs are loaded as CPLs.v2.14.41
| -rw-r--r-- | src/wx/kdm_cpl_panel.cc | 48 |
1 files 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 <libxml++/libxml++.h> #include <libcxml/cxml.h> #include <boost/foreach.hpp> @@ -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; } |
