Skip to content

Commit e85abe9

Browse files
committed
args: Catch directories in place of config files
Previously passing a directory path as -conf would lead to an ifstream being opened for it, and would not trigger any errors.
1 parent e4b6b18 commit e85abe9

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

src/common/config.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <algorithm>
1717
#include <cassert>
1818
#include <cstdlib>
19+
#include <filesystem>
1920
#include <fstream>
2021
#include <iostream>
2122
#include <list>
@@ -130,6 +131,10 @@ bool ArgsManager::ReadConfigFiles(std::string& error, bool ignore_invalid_keys)
130131
const auto conf_path{GetConfigFilePath()};
131132
std::ifstream stream;
132133
if (!conf_path.empty()) { // path is empty when -noconf is specified
134+
if (fs::is_directory(conf_path)) {
135+
error = strprintf("Config file \"%s\" is a directory.", fs::PathToString(conf_path));
136+
return false;
137+
}
133138
stream = std::ifstream{conf_path};
134139
// If the file is explicitly specified, it must be readable
135140
if (IsArgSet("-conf") && !stream.good()) {
@@ -177,7 +182,12 @@ bool ArgsManager::ReadConfigFiles(std::string& error, bool ignore_invalid_keys)
177182
const size_t default_includes = add_includes({});
178183

179184
for (const std::string& conf_file_name : conf_file_names) {
180-
std::ifstream conf_file_stream{AbsPathForConfigVal(*this, fs::PathFromString(conf_file_name), /*net_specific=*/false)};
185+
const auto include_conf_path{AbsPathForConfigVal(*this, fs::PathFromString(conf_file_name), /*net_specific=*/false)};
186+
if (fs::is_directory(include_conf_path)) {
187+
error = strprintf("Included config file \"%s\" is a directory.", fs::PathToString(include_conf_path));
188+
return false;
189+
}
190+
std::ifstream conf_file_stream{include_conf_path};
181191
if (conf_file_stream.good()) {
182192
if (!ReadConfigStream(conf_file_stream, conf_file_name, error, ignore_invalid_keys)) {
183193
return false;

src/init/common.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ bool StartLogging(const ArgsManager& args)
125125
fs::path config_file_path = args.GetConfigFilePath();
126126
if (args.IsArgNegated("-conf")) {
127127
LogInfo("Config file: <disabled>");
128+
} else if (fs::is_directory(config_file_path)) {
129+
LogWarning("Config file: %s (is directory, not file)", fs::PathToString(config_file_path));
128130
} else if (fs::exists(config_file_path)) {
129131
LogPrintf("Config file: %s\n", fs::PathToString(config_file_path));
130132
} else if (args.IsArgSet("-conf")) {

0 commit comments

Comments
 (0)