diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-08-30 22:28:06 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-11-11 21:24:29 +0100 |
| commit | aa8b4d4348394ea01e97f4c83e55fdbca3aa6cdb (patch) | |
| tree | 832566f25edd3e55fbb0d1cbb59a777a9772b358 | |
| parent | cba9d74bec5722db9079ecb8b5d4fc4bcb757a54 (diff) | |
Allow DCP reading to continue even with empty <Path> nodes in ASSETMAP.v1.6.11
| -rw-r--r-- | src/dcp.cc | 18 | ||||
| -rw-r--r-- | src/exceptions.cc | 11 | ||||
| -rw-r--r-- | src/exceptions.h | 8 |
3 files changed, 33 insertions, 4 deletions
@@ -173,7 +173,12 @@ DCP::read (bool keep_going, ReadErrors* errors, bool ignore_incorrect_picture_mx _pkls.push_back (shared_ptr<PKL>(new PKL(_directory / i))); } - /* Read all the assets from the asset map */ + /* Now we have: + paths - files in the DCP that are not PKLs. + _pkls - PKL objects for each PKL. + + Read all the assets from the asset map. + */ /* Make a list of non-CPL/PKL assets so that we can resolve the references from the CPLs. @@ -183,11 +188,20 @@ DCP::read (bool keep_going, ReadErrors* errors, bool ignore_incorrect_picture_mx for (map<string, boost::filesystem::path>::const_iterator i = paths.begin(); i != paths.end(); ++i) { boost::filesystem::path path = _directory / i->second; - if (!boost::filesystem::exists (path)) { + if (i->second.empty()) { + /* I can't see how this is valid, but it's + been seen in the wild with a DCP that + claims to come from ClipsterDCI 5.10.0.5. + */ + survivable_error (keep_going, errors, EmptyAssetPathError(i->first)); + } + + if (i->second.empty() || !boost::filesystem::exists(path)) { survivable_error (keep_going, errors, MissingAssetError (path)); continue; } + /* Find the <Type> for this asset from the PKL that contains the asset */ optional<string> pkl_type; BOOST_FOREACH (shared_ptr<PKL> j, _pkls) { pkl_type = j->type(i->first); diff --git a/src/exceptions.cc b/src/exceptions.cc index 7516d085..0b8978dc 100644 --- a/src/exceptions.cc +++ b/src/exceptions.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014-2018 Carl Hetherington <cth@carlh.net> + Copyright (C) 2014-2019 Carl Hetherington <cth@carlh.net> This file is part of libdcp. @@ -129,3 +129,12 @@ MissingSubtitleImageError::MissingSubtitleImageError (string id) { } + +/** The <Path> in the ASSETMAP is empty for asset. I can't see how this is valid, + but it's been seen in the wild with a DCP that claims to come from ClipsterDCI 5.10.0.5. + */ +EmptyAssetPathError::EmptyAssetPathError (string id) + : DCPReadError (String::compose("Asset map path is empty for asset %1", id)) +{ + +} diff --git a/src/exceptions.h b/src/exceptions.h index 65271c16..1e9bd2d7 100644 --- a/src/exceptions.h +++ b/src/exceptions.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net> + Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net> This file is part of libdcp. @@ -228,6 +228,12 @@ public: MissingSubtitleImageError (std::string id); }; +class EmptyAssetPathError : public DCPReadError +{ +public: + EmptyAssetPathError (std::string id); +}; + } #endif |
