diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-09-07 23:24:06 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-09-07 23:24:08 +0200 |
| commit | 77df016da7f8e1ee3f31c2a0d147c939e78add97 (patch) | |
| tree | 3fee8b0c893858dc86afdbe7cf1163c97d325057 | |
| parent | 5a1966c187c189da43a650f1425b29190f5cfe78 (diff) | |
Sanitise asset names after potentially failed %-based substitutions (#945).
If there's a %x in the format string, where %x is not recognised, we
should at least remove the %.
| -rw-r--r-- | src/lib/util.cc | 4 | ||||
| -rw-r--r-- | test/file_naming_test.cc | 20 |
2 files changed, 22 insertions, 2 deletions
diff --git a/src/lib/util.cc b/src/lib/util.cc index 6339cb6a6..1ce288686 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -733,9 +733,9 @@ asset_filename (shared_ptr<dcp::Asset> asset, string type, int reel_index, int r values['r'] = raw_convert<string>(reel_index + 1); values['n'] = raw_convert<string>(reel_count); if (summary) { - values['c'] = careful_string_filter(summary.get()); + values['c'] = summary.get(); } - return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + extension); + return careful_string_filter(Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + extension)); } diff --git a/test/file_naming_test.cc b/test/file_naming_test.cc index 1961bfcfe..1b5871bd2 100644 --- a/test/file_naming_test.cc +++ b/test/file_naming_test.cc @@ -197,3 +197,23 @@ BOOST_AUTO_TEST_CASE (subtitle_file_naming) BOOST_CHECK_EQUAL(got, 1); } + +BOOST_AUTO_TEST_CASE(remove_bad_characters_from_template) +{ + ConfigRestorer cr; + + /* %z is not recognised, so the % should be discarded so it won't trip + * an invalid URI check in make_and_verify_dcp + */ + Config::instance()->set_dcp_asset_filename_format(dcp::NameFormat("%c%z")); + + auto content = content_factory("test/data/flat_red.png"); + auto film = new_test_film2("remove_bad_characters_from_template", content); + make_and_verify_dcp( + film, + { + dcp::VerificationNote::Code::MISSING_FFMC_IN_FEATURE, + dcp::VerificationNote::Code::MISSING_FFEC_IN_FEATURE + }); +} + |
