Don't crash when loading DCPs with multiple CCAP assets per reel (part of #1516).
[dcpomatic.git] / src / lib / dcp_content.cc
index 469021d96ee4a641b7ede8f4f4eed066ea821f44..ef877a17fbd438d2159400190ebc91a185774597 100644 (file)
@@ -225,7 +225,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
                boost::mutex::scoped_lock lm (_mutex);
                _name = examiner->name ();
                for (int i = 0; i < TEXT_COUNT; ++i) {
-                       if (examiner->has_text(static_cast<TextType>(i))) {
+                       for (int j = 0; j < examiner->text_count(static_cast<TextType>(i)); ++j) {
                                text.push_back (shared_ptr<TextContent>(new TextContent(this, static_cast<TextType>(i), static_cast<TextType>(i))));
                        }
                }
@@ -547,10 +547,10 @@ DCPContent::can_reference (shared_ptr<const Film> film, function<bool (shared_pt
        list<DCPTimePeriod> reel_list;
        try {
                reel_list = reels (film);
-       } catch (dcp::DCPReadError) {
+       } catch (dcp::DCPReadError &) {
                /* We couldn't read the DCP; it's probably missing */
                return false;
-       } catch (dcp::KDMDecryptionError) {
+       } catch (dcp::KDMDecryptionError &) {
                /* We have an incorrect KDM */
                return false;
        }
@@ -625,13 +625,13 @@ DCPContent::can_reference_audio (shared_ptr<const Film> film, string& why_not) c
        shared_ptr<DCPDecoder> decoder;
        try {
                decoder.reset (new DCPDecoder (film, shared_from_this(), false));
-       } catch (dcp::DCPReadError) {
+       } catch (dcp::DCPReadError &) {
                /* We couldn't read the DCP, so it's probably missing */
                return false;
-       } catch (DCPError) {
+       } catch (DCPError &) {
                /* We couldn't read the DCP, so it's probably missing */
                return false;
-       } catch (dcp::KDMDecryptionError) {
+       } catch (dcp::KDMDecryptionError &) {
                /* We have an incorrect KDM */
                return false;
        }
@@ -660,11 +660,10 @@ DCPContent::can_reference_text (shared_ptr<const Film> film, TextType type, stri
        shared_ptr<DCPDecoder> decoder;
        try {
                decoder.reset (new DCPDecoder (film, shared_from_this(), false));
-       } catch (dcp::DCPReadError) {
-
+       } catch (dcp::DCPReadError &) {
                /* We couldn't read the DCP, so it's probably missing */
                return false;
-       } catch (dcp::KDMDecryptionError) {
+       } catch (dcp::KDMDecryptionError &) {
                /* We have an incorrect KDM */
                return false;
        }