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:10:44 +0100 |
| commit | 1dfb125a8e07f5185c229260ac0643e47eee5026 (patch) | |
| tree | 92f399e26aa43046db64c1ab56adda36e93962d9 /src/wx/kdm_cpl_panel.cc | |
| parent | d13bf7c8c311b12140c757ab9ed4454f6a16421e (diff) | |
Catch more errors when non-CPLs are loaded as CPLs.
Backported-from-commit: b73549f6c4f13e8ef5cadebbc767829aea5a2c16
Backported-from-branch: master
Diffstat (limited to 'src/wx/kdm_cpl_panel.cc')
| -rw-r--r-- | src/wx/kdm_cpl_panel.cc | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/src/wx/kdm_cpl_panel.cc b/src/wx/kdm_cpl_panel.cc index 8b4d93129..241b3880c 100644 --- a/src/wx/kdm_cpl_panel.cc +++ b/src/wx/kdm_cpl_panel.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2015-2019 Carl Hetherington <cth@carlh.net> + Copyright (C) 2015-2020 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -22,6 +22,10 @@ #include "wx_util.h" #include "static_text.h" #include "dcpomatic_button.h" +#include "lib/warnings.h" +DCPOMATIC_DISABLE_WARNINGS +#include <libxml++/libxml++.h> +DCPOMATIC_ENABLE_WARNINGS #include <libcxml/cxml.h> #include <boost/foreach.hpp> @@ -106,33 +110,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 +147,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; } |
