summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-12-05 13:59:34 +0100
committerCarl Hetherington <cth@carlh.net>2019-12-22 01:21:00 +0100
commit4c1a8e66f754d26e3db9c4c651e19ff4b6a94bb9 (patch)
treeceba2d381e518c33cf120c89e5a89507725bab90 /src
parentc83a8bc7e967597aaceab3e2a94e5f158e1dbcd5 (diff)
Report errors passed back from DCP::read when exceptions aren't used.
Fix crash when verifying DCPs with missing assets.
Diffstat (limited to 'src')
-rw-r--r--src/verify.cc40
1 files changed, 23 insertions, 17 deletions
diff --git a/src/verify.cc b/src/verify.cc
index e75be469..809e9e11 100644
--- a/src/verify.cc
+++ b/src/verify.cc
@@ -114,6 +114,10 @@ dcp::verify (vector<boost::filesystem::path> directories, function<void (string,
notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::GENERAL_READ, string(e.what())));
}
+ BOOST_FOREACH (shared_ptr<DCPReadError> i, errors) {
+ notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::GENERAL_READ, string(i->what())));
+ }
+
BOOST_FOREACH (shared_ptr<CPL> cpl, dcp->cpls()) {
stage ("Checking CPL", cpl->file());
@@ -141,24 +145,26 @@ dcp::verify (vector<boost::filesystem::path> directories, function<void (string,
notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::INVALID_PICTURE_FRAME_RATE));
}
/* Check asset */
- stage ("Checking picture asset hash", reel->main_picture()->asset()->file());
- Result const r = verify_asset (dcp, reel->main_picture(), progress);
- switch (r) {
- case RESULT_BAD:
- notes.push_back (
- VerificationNote(
- VerificationNote::VERIFY_ERROR, VerificationNote::PICTURE_HASH_INCORRECT, *reel->main_picture()->asset()->file()
- )
- );
- break;
- case RESULT_CPL_PKL_DIFFER:
- notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::PKL_CPL_PICTURE_HASHES_DISAGREE));
- break;
- default:
- break;
- }
+ if (reel->main_picture()->asset_ref().resolved()) {
+ stage ("Checking picture asset hash", reel->main_picture()->asset()->file());
+ Result const r = verify_asset (dcp, reel->main_picture(), progress);
+ switch (r) {
+ case RESULT_BAD:
+ notes.push_back (
+ VerificationNote(
+ VerificationNote::VERIFY_ERROR, VerificationNote::PICTURE_HASH_INCORRECT, *reel->main_picture()->asset()->file()
+ )
+ );
+ break;
+ case RESULT_CPL_PKL_DIFFER:
+ notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::PKL_CPL_PICTURE_HASHES_DISAGREE));
+ break;
+ default:
+ break;
+ }
+ }
}
- if (reel->main_sound()) {
+ if (reel->main_sound() && reel->main_sound()->asset_ref().resolved()) {
stage ("Checking sound asset hash", reel->main_sound()->asset()->file());
Result const r = verify_asset (dcp, reel->main_sound(), progress);
switch (r) {