Skip to content

Commit

Permalink
util: Properly handle -noincludeconf on command line
Browse files Browse the repository at this point in the history
This bug was introduced in commit
fad0867.

Unit test
Co-Authored-By: Russell Yanofsky <[email protected]>
  • Loading branch information
MarcoFalke authored and apoelstra committed Jun 19, 2021
1 parent 5f18d33 commit fd3dc5b
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
19 changes: 19 additions & 0 deletions src/test/util_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,25 @@ BOOST_FIXTURE_TEST_CASE(util_CheckValue, CheckValueTest)
CheckValue(M::ALLOW_ANY, "-value=abc", Expect{"abc"}.String("abc").Int(0).Bool(false).List({"abc"}));
}

struct NoIncludeConfTest {
std::string Parse(const char* arg)
{
TestArgsManager test;
test.SetupArgs({{"-includeconf", ArgsManager::ALLOW_ANY}});
std::array argv{"ignored", arg};
std::string error;
(void)test.ParseParameters(argv.size(), argv.data(), error);
return error;
}
};

BOOST_FIXTURE_TEST_CASE(util_NoIncludeConf, NoIncludeConfTest)
{
BOOST_CHECK_EQUAL(Parse("-noincludeconf"), "");
BOOST_CHECK_EQUAL(Parse("-includeconf"), "-includeconf cannot be used from commandline; -includeconf=\"\"");
BOOST_CHECK_EQUAL(Parse("-includeconf=file"), "-includeconf cannot be used from commandline; -includeconf=\"file\"");
}

BOOST_AUTO_TEST_CASE(util_ParseParameters)
{
TestArgsManager testArgs;
Expand Down
11 changes: 7 additions & 4 deletions src/util/system.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,11 +324,14 @@ bool ArgsManager::ParseParameters(int argc, const char* const argv[], std::strin
m_settings.command_line_options[key].push_back(value);
}

// we do not allow -includeconf from command line
// we do not allow -includeconf from command line, only -noincludeconf
if (auto* includes = util::FindKey(m_settings.command_line_options, "includeconf")) {
const auto& include{*util::SettingsSpan(*includes).begin()}; // pick first value as example
error = "-includeconf cannot be used from commandline; -includeconf=" + include.write();
return false;
const util::SettingsSpan values{*includes};
// Range may be empty if -noincludeconf was passed
if (!values.empty()) {
error = "-includeconf cannot be used from commandline; -includeconf=" + values.begin()->write();
return false; // pick first value as example
}
}
return true;
}
Expand Down

0 comments on commit fd3dc5b

Please sign in to comment.