diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-12-05 13:59:34 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-12-22 01:21:00 +0100 |
| commit | 4c1a8e66f754d26e3db9c4c651e19ff4b6a94bb9 (patch) | |
| tree | ceba2d381e518c33cf120c89e5a89507725bab90 /src | |
| parent | c83a8bc7e967597aaceab3e2a94e5f158e1dbcd5 (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.cc | 40 |
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) { |
