From d2d89ac412dbdba0747e44cdf1e4c90e29f6ef2b Mon Sep 17 00:00:00 2001 From: mokkori Date: Sun, 17 Feb 2013 16:08:51 +0100 Subject: Memory: Properly initialize and free new module languages. Memory: Properly free strings in module config directive lookups. Memory: Do not leak module version and author in rare situations. Memory: Memory leak when deleting a module callback. Memory: Memory leaks with module messages. Memory: Memory leaks with module commands. Memory: Memory leaks with module event handlers. Memory: Memory leaks with module event hooks. Memory: Every module config entry of type string is leaked on config reload. Memory: Leak services root list, ulines list, host setters list, modules autoload list, modules delayed autoload list, hostserv/memoserv/helpserv/botserv/operserv/chanserv/nickserv core modules lists on config reload. Memory: Leaks with channel bans/invites/exceptions. Memory: Leak when updating already existing ignore. Memory: Invalid pointer read in slists. Memory: Leak when using /cs appendtopic. Memory: Leak on (currently impossible) config reload. Memory: Syscall param write(buf) points to uninitialised byte(s) in save_ns_dbase(). Memory: Leak if PreNickServDB is set and NSEmailReg is not. Removing a command no longer calls free() on help_param*, reversed previous changes Changes to CSMaxReg, MSMaxMemos and NewsCount are now properly reflected in help notices after config reload Small adjustments Fixed copy&paste mistake Fix findCommand() searching in the wrong command tables --- src/core/os_opernews.c | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) (limited to 'src/core/os_opernews.c') diff --git a/src/core/os_opernews.c b/src/core/os_opernews.c index 5748f8904..773d1b3f6 100644 --- a/src/core/os_opernews.c +++ b/src/core/os_opernews.c @@ -27,7 +27,6 @@ int AnopeInit(int argc, char **argv) { Command *c; EvtHook *hook; - char buf[BUFSIZE]; moduleAddAuthor("Anope"); moduleAddVersion(VERSION_STRING); @@ -39,8 +38,7 @@ int AnopeInit(int argc, char **argv) **/ c = createCommand("OPERNEWS", do_opernews, is_services_admin, NEWS_HELP_OPER, -1, -1, -1, -1); - snprintf(buf, BUFSIZE, "%d", NewsCount), - c->help_param1 = sstrdup(buf); + c->help_param1 = (char *) (long) NewsCount; moduleAddCommand(OPERSERV, c, MOD_UNIQUE); moduleSetOperHelp(myOperServHelp); @@ -59,13 +57,6 @@ int AnopeInit(int argc, char **argv) **/ void AnopeFini(void) { - Command *c = findCommand(OPERSERV, "OPERNEWS"); - - if (c && c->help_param1) - { - free(c->help_param1); - c->help_param1 = NULL; - } } @@ -84,18 +75,11 @@ static void myOperServHelp(User * u) * Upon /os reload refresh the count **/ static int reload_config(int argc, char **argv) { - char buf[BUFSIZE]; Command *c; - if (argc >= 1) { - if (!stricmp(argv[0], EVENT_START)) { - if ((c = findCommand(OPERSERV, "OPERNEWS"))) { - free(c->help_param1); - snprintf(buf, BUFSIZE, "%d", NewsCount), - c->help_param1 = sstrdup(buf); - } - } - } + if (argc >= 1 && !stricmp(argv[0], EVENT_START)) + if ((c = findCommand(OPERSERV, "OPERNEWS"))) + c->help_param1 = (char *) (long) NewsCount; return MOD_CONT; } -- cgit