From: Peter Powell Date: Thu, 17 Aug 2017 13:54:49 +0000 (+0100) Subject: Add support for length arguments in getString. X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;ds=sidebyside;h=c0ca5c8d41a71eae4ec132e492b546fa03510871;p=user%2Fhenk%2Fcode%2Finspircd.git Add support for length arguments in getString. --- diff --git a/include/configreader.h b/include/configreader.h index 8da037e9a..1a0e70080 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -42,7 +42,7 @@ class CoreExport ConfigTag : public refcountbase const int src_line; /** Get the value of an option, using def if it does not exist */ - std::string getString(const std::string& key, const std::string& def = ""); + std::string getString(const std::string& key, const std::string& def = "", size_t minlen = 0, size_t maxlen = UINT32_MAX); /** Get the value of an option, using def if it does not exist */ long getInt(const std::string& key, long def = 0, long min = LONG_MIN, long max = LONG_MAX); /** Get the value of an option, using def if it does not exist */ diff --git a/src/configparser.cpp b/src/configparser.cpp index 7c03fe58a..86268a132 100644 --- a/src/configparser.cpp +++ b/src/configparser.cpp @@ -402,10 +402,18 @@ bool ConfigTag::readString(const std::string& key, std::string& value, bool allo return false; } -std::string ConfigTag::getString(const std::string& key, const std::string& def) +std::string ConfigTag::getString(const std::string& key, const std::string& def, size_t minlen, size_t maxlen) { - std::string res = def; - readString(key, res); + std::string res; + if (!readString(key, res)) + return def; + + if (res.length() < minlen || res.length() > maxlen) + { + ServerInstance->Logs->Log("CONFIG", LOG_DEFAULT, "WARNING: The length of <%s:%s> is not between %ld and %ld; value set to %s.", + tag.c_str(), key.c_str(), minlen, maxlen, def.c_str()); + return def; + } return res; } diff --git a/src/modules/m_alias.cpp b/src/modules/m_alias.cpp index 6d8e3a1c6..95667e7ed 100644 --- a/src/modules/m_alias.cpp +++ b/src/modules/m_alias.cpp @@ -73,8 +73,7 @@ class ModuleAlias : public Module { ConfigTag* fantasy = ServerInstance->Config->ConfValue("fantasy"); AllowBots = fantasy->getBool("allowbots", false); - std::string fpre = fantasy->getString("prefix"); - fprefix = fpre.empty() ? "!" : fpre; + fprefix = fantasy->getString("prefix", "!", 1, ServerInstance->Config->Limits.MaxLine); Aliases.clear(); ConfigTagList tags = ServerInstance->Config->ConfTags("alias"); diff --git a/src/modules/m_operprefix.cpp b/src/modules/m_operprefix.cpp index b355047ee..73155b394 100644 --- a/src/modules/m_operprefix.cpp +++ b/src/modules/m_operprefix.cpp @@ -32,8 +32,7 @@ class OperPrefixMode : public PrefixMode OperPrefixMode(Module* Creator) : PrefixMode(Creator, "operprefix", 'y', OPERPREFIX_VALUE) { - std::string pfx = ServerInstance->Config->ConfValue("operprefix")->getString("prefix", "!"); - prefix = pfx.empty() ? '!' : pfx[0]; + prefix = ServerInstance->Config->ConfValue("operprefix")->getString("prefix", "!", 1, 1)[0]; levelrequired = INT_MAX; } };