From 3435cd59dc2c9ac2b8d5ca23e331ff55cc6b8755 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(-) 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 ""; } }; -- cgit v1.3.1-10-gc9f91