diff options
-rw-r--r-- | Changes | 1 | ||||
-rw-r--r-- | src/core/hs_set.c | 31 | ||||
-rw-r--r-- | version.log | 6 |
3 files changed, 37 insertions, 1 deletions
@@ -26,6 +26,7 @@ Provided by Anope Dev. <dev@anope.org> - 2006 03/01 F Fixed memleak in os_mode.c. [#444] 03/01 F Fixed memleak in do_mass_mode(). [#450] 03/01 F Fixed memleaks in cs_list.c, hs_list.c and ns_list.c. [#447] +03/01 F Fixed memleaks in hs_set.c. [#441] Provided by nenolod. <nenolod@nenolod.net> - 2006 02/03 A Support for Charybdis IRCd. [ #00] diff --git a/src/core/hs_set.c b/src/core/hs_set.c index f62491414..b93acccc9 100644 --- a/src/core/hs_set.c +++ b/src/core/hs_set.c @@ -81,6 +81,7 @@ int myDoSet(User * u) if (!nick || !rawhostmask) { notice_lang(s_HostServ, u, HOST_SET_SYNTAX, s_HostServ); + free(hostmask); return MOD_CONT; } @@ -89,21 +90,32 @@ int myDoSet(User * u) rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1); /* get the remaining string */ if (!rawhostmask) { notice_lang(s_HostServ, u, HOST_SET_SYNTAX, s_HostServ); + free(vIdent); + free(hostmask); return MOD_CONT; } if (strlen(vIdent) > USERMAX - 1) { notice_lang(s_HostServ, u, HOST_SET_IDENTTOOLONG, USERMAX); + free(vIdent); + free(rawhostmask); + free(hostmask); return MOD_CONT; } else { for (s = vIdent; *s; s++) { if (!isvalidchar(*s)) { notice_lang(s_HostServ, u, HOST_SET_IDENT_ERROR); + free(vIdent); + free(rawhostmask); + free(hostmask); return MOD_CONT; } } } if (!ircd->vident) { notice_lang(s_HostServ, u, HOST_NO_VIDENT); + free(vIdent); + free(rawhostmask); + free(hostmask); return MOD_CONT; } } @@ -111,11 +123,21 @@ int myDoSet(User * u) snprintf(hostmask, HOSTMAX - 1, "%s", rawhostmask); else { notice_lang(s_HostServ, u, HOST_SET_TOOLONG, HOSTMAX); + if (vIdent) { + free(vIdent); + free(rawhostmask); + } + free(hostmask); return MOD_CONT; } if (!isValidHost(hostmask, 3)) { notice_lang(s_HostServ, u, HOST_SET_ERROR); + if (vIdent) { + free(vIdent); + free(rawhostmask); + } + free(hostmask); return MOD_CONT; } @@ -125,6 +147,11 @@ int myDoSet(User * u) if ((na = findnick(nick))) { if (na->status & NS_VERBOTEN) { notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick); + if (vIdent) { + free(vIdent); + free(rawhostmask); + } + free(hostmask); return MOD_CONT; } if (vIdent && ircd->vident) { @@ -143,5 +170,9 @@ int myDoSet(User * u) notice_lang(s_HostServ, u, HOST_NOREG, nick); } free(hostmask); + if (vIdent) { + free(vIdent); + free(rawhostmask); + } return MOD_CONT; } diff --git a/version.log b/version.log index c87527e5f..64789e16e 100644 --- a/version.log +++ b/version.log @@ -9,10 +9,14 @@ VERSION_MAJOR="1" VERSION_MINOR="7" VERSION_PATCH="13" VERSION_EXTRA="-svn" -VERSION_BUILD="992" +VERSION_BUILD="993" # $Log$ # +# BUILD : 1.7.13 (993) +# BUGS : 441 +# NOTES : Fixed memleak in hs_set.c +# # BUILD : 1.7.13 (992) # BUGS : 450 447 # NOTES : Fixed more memleaks. |