diff options
| author | Carl Hetherington <cth@carlh.net> | 2024-06-27 20:14:31 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2024-06-27 20:14:31 +0200 |
| commit | d6e8b54b2b60f70f1a8837183bc184809977be67 (patch) | |
| tree | fe267959d19bca6480e71701fbd642502319352c | |
| parent | 7e1e6564c680c426b9ec207c82d5ea2b9f4630ea (diff) | |
Fix error when importing bad subtitle file (#2838).
The subtitle XML refers to a font with no corresponding <LoadFont>.
| -rw-r--r-- | src/lib/font_id_allocator.cc | 4 | ||||
| m--------- | test/data | 0 | ||||
| -rw-r--r-- | test/subtitle_font_id_test.cc | 14 |
3 files changed, 17 insertions, 1 deletions
diff --git a/src/lib/font_id_allocator.cc b/src/lib/font_id_allocator.cc index 112dd262b..5e4ae9c0f 100644 --- a/src/lib/font_id_allocator.cc +++ b/src/lib/font_id_allocator.cc @@ -116,7 +116,9 @@ string FontIDAllocator::font_id(int reel_index, string asset_id, string font_id) const { auto iter = _map.find(Font(reel_index, asset_id, font_id)); - DCPOMATIC_ASSERT(iter != _map.end()); + if (iter == _map.end()) { + return default_font_id(); + } return String::compose("%1_%2", iter->second, font_id); } diff --git a/test/data b/test/data -Subproject 4cb08962ba07e99c442cb12091c0347d84d8fd8 +Subproject 6a4fa8b7c13e4f09fcee995191a2c86e1eff9d6 diff --git a/test/subtitle_font_id_test.cc b/test/subtitle_font_id_test.cc index bc09a9cf1..12d804d20 100644 --- a/test/subtitle_font_id_test.cc +++ b/test/subtitle_font_id_test.cc @@ -302,3 +302,17 @@ BOOST_AUTO_TEST_CASE(no_error_with_ccap_that_mentions_no_font) while (!player.pass()) {} } + +BOOST_AUTO_TEST_CASE(cope_with_unloaded_font_id) +{ + /* This file has a <Font> with an ID that corresponds to no <LoadFont> */ + auto subs = content_factory("test/data/unloaded_font.xml")[0]; + auto film = new_test_film2("cope_with_unloaded_font_id", { subs }); + make_and_verify_dcp( + film, + { + dcp::VerificationNote::Code::MISSING_SUBTITLE_LANGUAGE, + dcp::VerificationNote::Code::MISSING_CPL_METADATA, + }); +} + |
