From 3ee7abb7b9127edd8b730602376a9e827afb95f6 Mon Sep 17 00:00:00 2001 From: Daniel De Graaf Date: Sat, 4 Sep 2010 16:36:17 -0400 Subject: Fix crash in m_silence when provided with a bad pattern (bug #79) --- src/modules/m_silence.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'src/modules/m_silence.cpp') diff --git a/src/modules/m_silence.cpp b/src/modules/m_silence.cpp index 8c26051db..7925fd8d8 100644 --- a/src/modules/m_silence.cpp +++ b/src/modules/m_silence.cpp @@ -135,6 +135,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 *!*@* @@ -247,21 +253,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 ""; } }; -- cgit v1.3.1-10-gc9f91