summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2023-05-04 17:56:37 +0100
committerSadie Powell <sadie@witchery.services>2023-05-04 19:21:02 +0100
commitb7abfe5eca076c29a0d49a411320612264093bdf (patch)
treea8c8adaa95b0aff200b3567677b3da548ebc020c /src
parent23e7f5bd338cbb78ab3d990ba58064726de42abc (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.cpp8
-rw-r--r--src/init.cpp4
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;