Fix segfault when creating KDMs with certificates and project folders (not DKDMs).
authorCarl Hetherington <cth@carlh.net>
Wed, 29 Nov 2023 21:50:34 +0000 (22:50 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 29 Nov 2023 21:50:34 +0000 (22:50 +0100)
src/lib/screen.cc
test/kdm_cli_test.cc

index 7e29180185b69c68e9b54c3e55428952d96a604a..febf9085c3d344af6a77487c5aed1c04a60a7148 100644 (file)
@@ -93,7 +93,7 @@ kdm_for_screen (
        dcp::LocalTime const begin(valid_from, dcp::UTCOffset(cinema ? cinema->utc_offset_hour() : 0, cinema ? cinema->utc_offset_minute() : 0));
        dcp::LocalTime const end  (valid_to,   dcp::UTCOffset(cinema ? cinema->utc_offset_hour() : 0, cinema ? cinema->utc_offset_minute() : 0));
 
-       period_checks.push_back(check_kdm_and_certificate_validity_periods(cinema->name, screen->name, screen->recipient.get(), begin, end));
+       period_checks.push_back(check_kdm_and_certificate_validity_periods(cinema ? cinema->name : "", screen->name, screen->recipient.get(), begin, end));
 
        auto signer = Config::instance()->signer_chain();
        if (!signer->valid()) {
index 4114cebd4e5dcb6169a6712a3c4cf0828c402fd0..e79e37b2d83434ef7d340ed1b7d181d19c775c6b 100644 (file)
@@ -21,6 +21,8 @@
 
 #include "lib/cinema.h"
 #include "lib/config.h"
+#include "lib/content_factory.h"
+#include "lib/film.h"
 #include "lib/kdm_cli.h"
 #include "lib/screen.h"
 #include "lib/trusted_device.h"
@@ -195,3 +197,34 @@ BOOST_AUTO_TEST_CASE(kdm_cli_specify_cinemas_file)
        BOOST_CHECK_EQUAL(output[2], "Great ()");
 }
 
+
+BOOST_AUTO_TEST_CASE(kdm_cli_specify_cert)
+{
+       boost::filesystem::path kdm_filename = "build/test/KDM_KDMCLI__.xml";
+
+       boost::system::error_code ec;
+       boost::filesystem::remove(kdm_filename, ec);
+
+       auto film = new_test_film2("kdm_cli_specify_cert", content_factory("test/data/flat_red.png"));
+       film->set_encrypted(true);
+       film->set_name("KDMCLI");
+       film->set_use_isdcf_name(false);
+       make_and_verify_dcp(film);
+
+       vector<string> args = {
+               "kdm_cli",
+               "--valid-from", "2024-01-01 10:10:10",
+               "--valid-duration", "2 weeks",
+               "-C", "test/data/cert.pem",
+               "-o", "build/test",
+               "build/test/kdm_cli_specify_cert"
+       };
+
+       vector<string> output;
+       auto error = run(args, output);
+       BOOST_CHECK(!error);
+
+       BOOST_CHECK(output.empty());
+       BOOST_CHECK(boost::filesystem::exists(kdm_filename));
+}
+