From fa9f711c3746ca3962f15224285a453744cd45b3 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Fri, 21 May 2021 10:52:46 +0200 Subject: [PATCH 1/2] Fix crash when parsing command line with -noincludeconf=0 --- src/util/system.cpp | 2 +- test/functional/feature_includeconf.py | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/util/system.cpp b/src/util/system.cpp index 9b3bd46b386..00cbca1c36a 100644 --- a/src/util/system.cpp +++ b/src/util/system.cpp @@ -369,7 +369,7 @@ bool ArgsManager::ParseParameters(int argc, const char* const argv[], std::strin bool success = true; if (auto* includes = util::FindKey(m_settings.command_line_options, "includeconf")) { for (const auto& include : util::SettingsSpan(*includes)) { - error += "-includeconf cannot be used from commandline; -includeconf=" + include.get_str() + "\n"; + error += "-includeconf cannot be used from commandline; -includeconf=" + include.write() + "\n"; success = false; } } diff --git a/test/functional/feature_includeconf.py b/test/functional/feature_includeconf.py index f22b7f266ac..061d90c446c 100755 --- a/test/functional/feature_includeconf.py +++ b/test/functional/feature_includeconf.py @@ -42,7 +42,14 @@ class IncludeConfTest(BitcoinTestFramework): self.log.info("-includeconf cannot be used as command-line arg") self.stop_node(0) - self.nodes[0].assert_start_raises_init_error(extra_args=["-includeconf=relative2.conf"], expected_msg="Error: Error parsing command line arguments: -includeconf cannot be used from commandline; -includeconf=relative2.conf") + self.nodes[0].assert_start_raises_init_error( + extra_args=['-noincludeconf=0'], + expected_msg='Error: Error parsing command line arguments: -includeconf cannot be used from commandline; -includeconf=true', + ) + self.nodes[0].assert_start_raises_init_error( + extra_args=['-includeconf=relative2.conf'], + expected_msg='Error: Error parsing command line arguments: -includeconf cannot be used from commandline; -includeconf="relative2.conf"', + ) self.log.info("-includeconf cannot be used recursively. subversion should end with 'main; relative)/'") with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "a", encoding="utf8") as f: From fad0867d6ab9430070aa7d60bf7617a6508e0586 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Thu, 20 May 2021 13:46:15 +0200 Subject: [PATCH 2/2] Cleanup -includeconf error message Remove the erroneous trailing newline '\n'. Also, print only the first value to remove needless redundancy in the error message. --- src/util/system.cpp | 10 ++++------ test/functional/feature_includeconf.py | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/util/system.cpp b/src/util/system.cpp index 00cbca1c36a..76d63074e44 100644 --- a/src/util/system.cpp +++ b/src/util/system.cpp @@ -366,14 +366,12 @@ bool ArgsManager::ParseParameters(int argc, const char* const argv[], std::strin } // we do not allow -includeconf from command line - bool success = true; if (auto* includes = util::FindKey(m_settings.command_line_options, "includeconf")) { - for (const auto& include : util::SettingsSpan(*includes)) { - error += "-includeconf cannot be used from commandline; -includeconf=" + include.write() + "\n"; - success = false; - } + const auto& include{*util::SettingsSpan(*includes).begin()}; // pick first value as example + error = "-includeconf cannot be used from commandline; -includeconf=" + include.write(); + return false; } - return success; + return true; } std::optional ArgsManager::GetArgFlags(const std::string& name) const diff --git a/test/functional/feature_includeconf.py b/test/functional/feature_includeconf.py index 061d90c446c..448182ededb 100755 --- a/test/functional/feature_includeconf.py +++ b/test/functional/feature_includeconf.py @@ -47,7 +47,7 @@ class IncludeConfTest(BitcoinTestFramework): expected_msg='Error: Error parsing command line arguments: -includeconf cannot be used from commandline; -includeconf=true', ) self.nodes[0].assert_start_raises_init_error( - extra_args=['-includeconf=relative2.conf'], + extra_args=['-includeconf=relative2.conf', '-includeconf=no_warn.conf'], expected_msg='Error: Error parsing command line arguments: -includeconf cannot be used from commandline; -includeconf="relative2.conf"', )