summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorgenius3000 <genius3000@g3k.solutions>2018-04-06 09:08:30 -0600
committerPeter Powell <petpow@saberuk.com>2018-04-06 16:08:30 +0100
commit9ea8191a050aa2262289a11edde115de1bcb0d71 (patch)
tree577fbb03298bfe2409e1245f989a3623afc0f068 /src/modules
parentd53d919bd871bde1de26312257ada58463d74501 (diff)
Validate settings in order in ValidateSettings() (#1475).
* Validate the settings in the same order as the parameter syntax * Always validate Lines and Secs regardless of having a Diff * Check Backlog for greater than Max as well as being disabled
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/m_repeat.cpp49
1 files changed, 25 insertions, 24 deletions
diff --git a/src/modules/m_repeat.cpp b/src/modules/m_repeat.cpp
index 3e974c221..7ecdf21dc 100644
--- a/src/modules/m_repeat.cpp
+++ b/src/modules/m_repeat.cpp
@@ -306,39 +306,40 @@ class RepeatMode : public ParamMode<RepeatMode, SimpleExtItem<ChannelSettings> >
bool ValidateSettings(LocalUser* source, Channel* channel, const std::string& parameter, const ChannelSettings& settings)
{
- if (settings.Backlog && !ms.MaxBacklog)
+ if (ms.MaxLines && settings.Lines > ms.MaxLines)
{
- source->WriteNumeric(Numerics::InvalidModeParameter(channel, this, parameter,
- "Invalid repeat parameter. The server administrator has disabled backlog matching."));
+ source->WriteNumeric(Numerics::InvalidModeParameter(channel, this, parameter, InspIRCd::Format(
+ "Invalid repeat parameter. The line number you specified is too great. Maximum allowed is %u.", ms.MaxLines)));
return false;
}
- if (settings.Diff)
+ if (ms.MaxSecs && settings.Seconds > ms.MaxSecs)
{
- if (settings.Diff > ms.MaxDiff)
- {
- if (ms.MaxDiff == 0)
- source->WriteNumeric(Numerics::InvalidModeParameter(channel, this, parameter,
- "Invalid repeat parameter. The server administrator has disabled matching on edit distance."));
- else
- source->WriteNumeric(Numerics::InvalidModeParameter(channel, this, parameter, InspIRCd::Format(
- "Invalid repeat parameter. The distance you specified is too great. Maximum allowed is %u.", ms.MaxDiff)));
- return false;
- }
+ source->WriteNumeric(Numerics::InvalidModeParameter(channel, this, parameter, InspIRCd::Format(
+ "Invalid repeat parameter. The seconds you specified is too great. Maximum allowed is %u.", ms.MaxSecs)));
+ return false;
+ }
- if (ms.MaxLines && settings.Lines > ms.MaxLines)
- {
+ if (settings.Diff && settings.Diff > ms.MaxDiff)
+ {
+ if (ms.MaxDiff == 0)
+ source->WriteNumeric(Numerics::InvalidModeParameter(channel, this, parameter,
+ "Invalid repeat parameter. The server administrator has disabled matching on edit distance."));
+ else
source->WriteNumeric(Numerics::InvalidModeParameter(channel, this, parameter, InspIRCd::Format(
- "Invalid repeat parameter. The line number you specified is too great. Maximum allowed is %u.", ms.MaxLines)));
- return false;
- }
+ "Invalid repeat parameter. The distance you specified is too great. Maximum allowed is %u.", ms.MaxDiff)));
+ return false;
+ }
- if (ms.MaxSecs && settings.Seconds > ms.MaxSecs)
- {
+ if (settings.Backlog && settings.Backlog > ms.MaxBacklog)
+ {
+ if (ms.MaxBacklog == 0)
+ source->WriteNumeric(Numerics::InvalidModeParameter(channel, this, parameter,
+ "Invalid repeat parameter. The server administrator has disabled backlog matching."));
+ else
source->WriteNumeric(Numerics::InvalidModeParameter(channel, this, parameter, InspIRCd::Format(
- "Invalid repeat parameter. The seconds you specified is too great. Maximum allowed is %u.", ms.MaxSecs)));
- return false;
- }
+ "Invalid repeat paramter. The backlog you specified is too great. Maximum allowed is %u.", ms.MaxBacklog)));
+ return false;
}
return true;