From 4868612f4d09c2528574ff99f7df5c9e25724ffd Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Thu, 4 Jan 2024 12:06:50 +0100 Subject: [PATCH] fix: error handling when using compression with metadata requirements --- src/mkdwarfs_main.cpp | 13 ++++++++++++- test/tool_main_test.cpp | 7 +++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/mkdwarfs_main.cpp b/src/mkdwarfs_main.cpp index c96685ab..a8b90f97 100644 --- a/src/mkdwarfs_main.cpp +++ b/src/mkdwarfs_main.cpp @@ -1224,7 +1224,18 @@ int mkdwarfs_main(int argc, sys_char** argv, iolayer const& iol) { categorizer_list.add_implicit_defaults(cop); LOG_VERBOSE << cop.as_string(); - fsw->add_default_compressor(compression_opt.get()); + { + auto bc = compression_opt.get(); + + if (!bc.metadata_requirements().empty()) { + throw std::runtime_error( + fmt::format("compression '{}' cannot be used without a category: " + "metadata requirements not met", + bc.describe())); + } + + fsw->add_default_compressor(std::move(bc)); + } if (recompress) { compression_opt.visit_contextual( diff --git a/test/tool_main_test.cpp b/test/tool_main_test.cpp index b67cbfec..3be614c0 100644 --- a/test/tool_main_test.cpp +++ b/test/tool_main_test.cpp @@ -1071,3 +1071,10 @@ TEST(mkdwarfs_test, output_file_fail_close) { EXPECT_NE(0, t.run({"-i", "/", "-o", "test.dwarfs"})) << t.err(); EXPECT_THAT(t.err(), ::testing::HasSubstr("failed to close output file")); } + +TEST(mkdwarfs_test, compression_cannot_be_used) { + mkdwarfs_tester t; + EXPECT_NE(0, t.run({"-i", "/", "-o", "-", "-C", "flac"})); + EXPECT_THAT(t.err(), + ::testing::HasSubstr("cannot be used without a category")); +}