diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-12-05 13:59:34 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-12-06 12:32:36 +0100 |
| commit | ca67bde32568f15907af7859df19c84d9449afcc (patch) | |
| tree | ceba2d381e518c33cf120c89e5a89507725bab90 /src/verify.cc | |
| parent | 548dc650648cead2534a6289ca048dc1ce24afd4 (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/verify.cc')
| -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) { |
