diff options
author | genius3000 <genius3000@g3k.solutions> | 2018-04-06 09:08:30 -0600 |
---|---|---|
committer | Peter Powell <petpow@saberuk.com> | 2018-04-06 16:08:30 +0100 |
commit | 9ea8191a050aa2262289a11edde115de1bcb0d71 (patch) | |
tree | 577fbb03298bfe2409e1245f989a3623afc0f068 /src/modules | |
parent | d53d919bd871bde1de26312257ada58463d74501 (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.cpp | 49 |
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; |