summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes1
-rw-r--r--src/core/hs_set.c31
-rw-r--r--version.log6
3 files changed, 37 insertions, 1 deletions
diff --git a/Changes b/Changes
index 20f51ead2..7c7d095c3 100644
--- a/Changes
+++ b/Changes
@@ -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.