diff options
author | Sadie Powell <sadie@witchery.services> | 2023-05-04 17:56:37 +0100 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2023-05-04 19:21:02 +0100 |
commit | b7abfe5eca076c29a0d49a411320612264093bdf (patch) | |
tree | a8c8adaa95b0aff200b3567677b3da548ebc020c /src | |
parent | 23e7f5bd338cbb78ab3d990ba58064726de42abc (diff) |
Avoid returning null when a config tag does not exist.
This invokes undefined behaviour on modern compilers.
Diffstat (limited to 'src')
-rw-r--r-- | src/config.cpp | 8 | ||||
-rw-r--r-- | src/init.cpp | 4 |
2 files changed, 6 insertions, 6 deletions
diff --git a/src/config.cpp b/src/config.cpp index bd9bebe5c..dc9620f1d 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -49,7 +49,7 @@ Block* Block::GetBlock(const Anope::string &bname, int num) for (int i = 0; it.first != it.second; ++it.first, ++i) if (i == num) return &it.first->second; - return NULL; + return &(Config->EmptyBlock); } bool Block::Set(const Anope::string &tag, const Anope::string &value) @@ -116,7 +116,7 @@ template<typename T> static void ValidateNotZero(const Anope::string &block, con throw ConfigException("The value for <" + block + ":" + name + "> cannot be zero!"); } -Conf::Conf() : Block("") +Conf::Conf() : Block(""), EmptyBlock("") { ReadTimeout = 0; UsePrivmsg = DefPrivmsg = false; @@ -602,7 +602,7 @@ void Conf::Post(Conf *old) Block *Conf::GetModule(Module *m) { if (!m) - return NULL; + return &(Config->EmptyBlock); return GetModule(m->name); } @@ -654,7 +654,7 @@ Block *Conf::GetCommand(CommandSource &source) return b; } - return NULL; + return &(Config->EmptyBlock); } File::File(const Anope::string &n, bool e) : name(n), executable(e), fp(NULL) diff --git a/src/init.cpp b/src/init.cpp index 025b34c4e..22f8385ee 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -427,8 +427,8 @@ void Anope::Init(int ac, char **av) if (!getuid() && !getgid()) { /* If we are configured to setuid later, don't issue a warning */ - Configuration::Block *options = Config->GetBlock("options"); - if (options->Get<const Anope::string>("user").empty()) + Configuration::Block *options = Config ? Config->GetBlock("options") : NULL; + if (!options || options->Get<const Anope::string>("user").empty()) { std::cerr << "WARNING: You are currently running Anope as the root superuser. Anope does not" << std::endl; std::cerr << " require root privileges to run, and it is discouraged that you run Anope" << std::endl; |