diff options
| author | 2010-09-04 16:36:17 -0400 | |
|---|---|---|
| committer | 2010-09-04 16:38:58 -0400 | |
| commit | 3435cd59dc2c9ac2b8d5ca23e331ff55cc6b8755 (patch) | |
| tree | 808e7e53ce0fd56bc95febf4159611a626097eff | |
| parent | Fix resolved hostname being cropped when WEBIRC passes a hostname longer than... (diff) | |
Fix crash in m_silence when provided with a bad pattern (bug #79)
| -rw-r--r-- | src/modules/m_silence.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/modules/m_silence.cpp b/src/modules/m_silence.cpp index 9b5f393e5..c613465b1 100644 --- a/src/modules/m_silence.cpp +++ b/src/modules/m_silence.cpp @@ -129,6 +129,12 @@ class CommandSilence : public Command pattern = CompilePattern(parameters[1].c_str()); } + if (pattern == 0) + { + user->WriteServ("NOTICE %s :Bad SILENCE pattern",user->nick.c_str()); + return CMD_INVALID; + } + if (!mask.length()) { // 'SILENCE +' or 'SILENCE -', assume *!*@* @@ -245,21 +251,24 @@ class CommandSilence : public Command std::string DecompPattern (const int pattern) { std::string out; - if ((pattern & SILENCE_PRIVATE) > 0) + if (pattern & SILENCE_PRIVATE) out += ",privatemessages"; - if ((pattern & SILENCE_CHANNEL) > 0) + if (pattern & SILENCE_CHANNEL) out += ",channelmessages"; - if ((pattern & SILENCE_INVITE) > 0) + if (pattern & SILENCE_INVITE) out += ",invites"; - if ((pattern & SILENCE_NOTICE) > 0) + if (pattern & SILENCE_NOTICE) out += ",privatenotices"; - if ((pattern & SILENCE_CNOTICE) > 0) + if (pattern & SILENCE_CNOTICE) out += ",channelnotices"; - if ((pattern & SILENCE_ALL) > 0) + if (pattern & SILENCE_ALL) out = ",all"; - if ((pattern & SILENCE_EXCLUDE) > 0) + if (pattern & SILENCE_EXCLUDE) out += ",exclude"; - return "<" + out.substr(1) + ">"; + if (out.length()) + return "<" + out.substr(1) + ">"; + else + return "<none>"; } }; |
