summaryrefslogtreecommitdiff
path: root/src/coremods
diff options
context:
space:
mode:
authorlinuxdaemon <linuxdaemon@users.noreply.github.com>2018-12-21 12:37:22 -0600
committerPeter Powell <petpow@saberuk.com>2018-12-21 19:37:22 +0100
commit7530285740c2db1bc4457859b0d5f2436e0ed113 (patch)
tree89635613725a1b7ad6e262d7e3035a518d42e8d2 /src/coremods
parent60ae49b62a371791ebbd9e4b131e33b857873f06 (diff)
Only parse valid durations, don't treat invalid multipliers as seconds (#1538)
Diffstat (limited to 'src/coremods')
-rw-r--r--src/coremods/core_channel/cmd_invite.cpp10
-rw-r--r--src/coremods/core_xline/cmd_eline.cpp7
-rw-r--r--src/coremods/core_xline/cmd_gline.cpp7
-rw-r--r--src/coremods/core_xline/cmd_kline.cpp7
-rw-r--r--src/coremods/core_xline/cmd_qline.cpp7
-rw-r--r--src/coremods/core_xline/cmd_zline.cpp7
6 files changed, 39 insertions, 6 deletions
diff --git a/src/coremods/core_channel/cmd_invite.cpp b/src/coremods/core_channel/cmd_invite.cpp
index ebb95f1b4..c26318337 100644
--- a/src/coremods/core_channel/cmd_invite.cpp
+++ b/src/coremods/core_channel/cmd_invite.cpp
@@ -51,7 +51,15 @@ CmdResult CommandInvite::Handle(User* user, const Params& parameters)
if (parameters.size() >= 3)
{
if (IS_LOCAL(user))
- timeout = ServerInstance->Time() + InspIRCd::Duration(parameters[2]);
+ {
+ unsigned long duration;
+ if (!InspIRCd::Duration(parameters[2], duration))
+ {
+ user->WriteNotice("*** Invalid duration for invite");
+ return CMD_FAILURE;
+ }
+ timeout = ServerInstance->Time() + duration;
+ }
else if (parameters.size() > 3)
timeout = ConvToNum<time_t>(parameters[3]);
}
diff --git a/src/coremods/core_xline/cmd_eline.cpp b/src/coremods/core_xline/cmd_eline.cpp
index 0cb52298c..a3a4d9466 100644
--- a/src/coremods/core_xline/cmd_eline.cpp
+++ b/src/coremods/core_xline/cmd_eline.cpp
@@ -58,7 +58,12 @@ CmdResult CommandEline::Handle(User* user, const Params& parameters)
if (InsaneBan::MatchesEveryone(ih.first+"@"+ih.second, matcher, user, "E", "hostmasks"))
return CMD_FAILURE;
- unsigned long duration = InspIRCd::Duration(parameters[1]);
+ unsigned long duration;
+ if (!InspIRCd::Duration(parameters[1], duration))
+ {
+ user->WriteNotice("*** Invalid duration for E-line");
+ return CMD_FAILURE;
+ }
ELine* el = new ELine(ServerInstance->Time(), duration, user->nick.c_str(), parameters[2].c_str(), ih.first.c_str(), ih.second.c_str());
if (ServerInstance->XLines->AddLine(el, user))
{
diff --git a/src/coremods/core_xline/cmd_gline.cpp b/src/coremods/core_xline/cmd_gline.cpp
index 79b3ce21f..a9de707c4 100644
--- a/src/coremods/core_xline/cmd_gline.cpp
+++ b/src/coremods/core_xline/cmd_gline.cpp
@@ -64,7 +64,12 @@ CmdResult CommandGline::Handle(User* user, const Params& parameters)
return CMD_FAILURE;
}
- unsigned long duration = InspIRCd::Duration(parameters[1]);
+ unsigned long duration;
+ if (!InspIRCd::Duration(parameters[1], duration))
+ {
+ user->WriteNotice("*** Invalid duration for G-line");
+ return CMD_FAILURE;
+ }
GLine* gl = new GLine(ServerInstance->Time(), duration, user->nick.c_str(), parameters[2].c_str(), ih.first.c_str(), ih.second.c_str());
if (ServerInstance->XLines->AddLine(gl, user))
{
diff --git a/src/coremods/core_xline/cmd_kline.cpp b/src/coremods/core_xline/cmd_kline.cpp
index 0f04224d6..9b474d16c 100644
--- a/src/coremods/core_xline/cmd_kline.cpp
+++ b/src/coremods/core_xline/cmd_kline.cpp
@@ -64,7 +64,12 @@ CmdResult CommandKline::Handle(User* user, const Params& parameters)
return CMD_FAILURE;
}
- unsigned long duration = InspIRCd::Duration(parameters[1]);
+ unsigned long duration;
+ if (!InspIRCd::Duration(parameters[1], duration))
+ {
+ user->WriteNotice("*** Invalid duration for K-line");
+ return CMD_FAILURE;
+ }
KLine* kl = new KLine(ServerInstance->Time(), duration, user->nick.c_str(), parameters[2].c_str(), ih.first.c_str(), ih.second.c_str());
if (ServerInstance->XLines->AddLine(kl,user))
{
diff --git a/src/coremods/core_xline/cmd_qline.cpp b/src/coremods/core_xline/cmd_qline.cpp
index b75973861..893c8d213 100644
--- a/src/coremods/core_xline/cmd_qline.cpp
+++ b/src/coremods/core_xline/cmd_qline.cpp
@@ -44,7 +44,12 @@ CmdResult CommandQline::Handle(User* user, const Params& parameters)
return CMD_FAILURE;
}
- unsigned long duration = InspIRCd::Duration(parameters[1]);
+ unsigned long duration;
+ if (!InspIRCd::Duration(parameters[1], duration))
+ {
+ user->WriteNotice("*** Invalid duration for Q-line");
+ return CMD_FAILURE;
+ }
QLine* ql = new QLine(ServerInstance->Time(), duration, user->nick.c_str(), parameters[2].c_str(), parameters[0].c_str());
if (ServerInstance->XLines->AddLine(ql,user))
{
diff --git a/src/coremods/core_xline/cmd_zline.cpp b/src/coremods/core_xline/cmd_zline.cpp
index 350f3270c..e81fc727f 100644
--- a/src/coremods/core_xline/cmd_zline.cpp
+++ b/src/coremods/core_xline/cmd_zline.cpp
@@ -62,7 +62,12 @@ CmdResult CommandZline::Handle(User* user, const Params& parameters)
if (InsaneBan::MatchesEveryone(ipaddr, matcher, user, "Z", "ipmasks"))
return CMD_FAILURE;
- unsigned long duration = InspIRCd::Duration(parameters[1]);
+ unsigned long duration;
+ if (!InspIRCd::Duration(parameters[1], duration))
+ {
+ user->WriteNotice("*** Invalid duration for Z-line");
+ return CMD_FAILURE;
+ }
ZLine* zl = new ZLine(ServerInstance->Time(), duration, user->nick.c_str(), parameters[2].c_str(), ipaddr);
if (ServerInstance->XLines->AddLine(zl,user))
{