diff options
author | Adam <Adam@anope.org> | 2011-07-23 05:01:44 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-07-23 05:01:44 -0400 |
commit | 30ea6365de8361b7e7d96cc3b175d4130983e30d (patch) | |
tree | b4fe988e1eb45ead3fe34b0854631406440d067f | |
parent | a11155551efd475ac511313963b878992d2de73b (diff) |
Fixed a potential crash in the badwords kicker, and fixed matching BW_SINGLE with BSCaseSensitive enabled
-rw-r--r-- | Changes | 2 | ||||
-rw-r--r-- | src/botserv.c | 33 | ||||
-rw-r--r-- | version.log | 3 |
3 files changed, 12 insertions, 26 deletions
@@ -1,7 +1,7 @@ Anope Version 1.8 - GIT ----------------------- 05/30 F Fixed removing vhosts on InspIRCd when m_cloaking is unloaded [#1273] - +07/23 F Fixed a potential crash in the badwords kicker [ #00] Anope Version 1.8.6 ------------------- diff --git a/src/botserv.c b/src/botserv.c index e1edad345..7506df7f5 100644 --- a/src/botserv.c +++ b/src/botserv.c @@ -245,6 +245,7 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf) mustkick = 1; } else if (bw->type == BW_SINGLE) { int len = strlen(bw->word); + int buf_len = strlen(nbuf); if ((BSCaseSensitive && !strcmp(nbuf, bw->word)) || (!BSCaseSensitive @@ -252,23 +253,13 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf) mustkick = 1; /* two next if are quite odd isn't it? =) */ } else if ((strchr(nbuf, ' ') == nbuf + len) - && - ((BSCaseSensitive - && !strcmp(nbuf, bw->word)) - || (!BSCaseSensitive - && (stristr(nbuf, bw->word) == - nbuf)))) { + && ((BSCaseSensitive && strstr(nbuf, bw->word) == nbuf) + || (!BSCaseSensitive && stristr(nbuf, bw->word) == nbuf))) { mustkick = 1; } else { - if ((strrchr(nbuf, ' ') == - nbuf + strlen(nbuf) - len - 1) - && - ((BSCaseSensitive - && (strstr(nbuf, bw->word) == - nbuf + strlen(nbuf) - len)) - || (!BSCaseSensitive - && (stristr(nbuf, bw->word) == - nbuf + strlen(nbuf) - len)))) { + if (len < buf_len && (strrchr(nbuf, ' ') == nbuf + buf_len - len - 1) + && ((BSCaseSensitive && (strstr(nbuf, bw->word) == nbuf + buf_len - len)) + || (!BSCaseSensitive && (stristr(nbuf, bw->word) == nbuf + buf_len - len)))) { mustkick = 1; } else { char *wordbuf = scalloc(len + 3, 1); @@ -313,16 +304,10 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf) } } else if (bw->type == BW_END) { int len = strlen(bw->word); + int buf_len = strlen(nbuf); - if ((BSCaseSensitive - && - (!strncmp - (nbuf + strlen(nbuf) - len, bw->word, len))) - || (!BSCaseSensitive - && - (!strnicmp - (nbuf + strlen(nbuf) - len, bw->word, - len)))) { + if ((BSCaseSensitive && len <= buf_len && !strncmp(nbuf + buf_len - len, bw->word, len)) + || (!BSCaseSensitive && len <= buf_len && !strnicmp(nbuf + buf_len - len, bw->word, len))) { mustkick = 1; } else { char *wordbuf = scalloc(len + 2, 1); diff --git a/version.log b/version.log index 1e05c274a..e80aaa2b3 100644 --- a/version.log +++ b/version.log @@ -8,9 +8,10 @@ VERSION_MAJOR="1" VERSION_MINOR="8" VERSION_PATCH="7" VERSION_EXTRA="-git" -VERSION_BUILD="3074" +VERSION_BUILD="3075" # $Log$ # Changes since 1.8.6 Release +#Revision 3075 - Fixed a potential crash in the badwords kicker, and fixed matching BW_SINGLE with BSCaseSensitive enabled #Revision 3074 - Bug #1273 - Fixed removing vhosts on InspIRCd when m_cloaking is unloaded |