From 6beef589e32d874e5d961e7e6f7b2a68c56538bd Mon Sep 17 00:00:00 2001 From: RichardHitt Date: Wed, 9 Jan 2013 14:37:57 -0800 Subject: [PATCH 1/3] Make source cleah with cppcheck, except for mpc and sasl --- plugins/checksum/checksum.c | 1 + plugins/python/python.c | 1 + plugins/sysinfo/match.c | 3 ++- plugins/sysinfo/parse.c | 9 ++++----- src/common/dcc.c | 3 +++ src/common/outbound.c | 2 +- src/common/server.c | 1 + src/common/util.c | 11 ++++++++++- src/fe-gtk/fkeys.c | 1 + src/fe-gtk/maingui.c | 3 ++- src/fe-text/fe-text.c | 2 +- 11 files changed, 27 insertions(+), 10 deletions(-) diff --git a/plugins/checksum/checksum.c b/plugins/checksum/checksum.c index 492367f6..08d62773 100644 --- a/plugins/checksum/checksum.c +++ b/plugins/checksum/checksum.c @@ -108,6 +108,7 @@ sha256_file (char *path, char outputBuffer[65]) if (!buffer) { + fclose (file); return ENOMEM; } diff --git a/plugins/python/python.c b/plugins/python/python.c index 0ff669b6..2e298c35 100644 --- a/plugins/python/python.c +++ b/plugins/python/python.c @@ -2137,6 +2137,7 @@ Command_PyReload(char *name) char *filename = strdup(plugin->filename); Command_PyUnload(filename); Command_PyLoad(filename); + /* cppcheck-suppress deallocDealloc */ g_free(filename); } } diff --git a/plugins/sysinfo/match.c b/plugins/sysinfo/match.c index e40ac428..7d719738 100644 --- a/plugins/sysinfo/match.c +++ b/plugins/sysinfo/match.c @@ -37,7 +37,6 @@ char *pretty_freespace(const char *desc, unsigned long long *free_k, unsigned lo free_space = *free_k; total_space = *total_k; result = malloc(bsize * sizeof(char)); - bytesize = malloc(3 * sizeof(char)); const char *quantities = "KB\0MB\0GB\0TB\0PB\0EB\0ZB\0YB\0"; int i=0; if (total_space == 0) @@ -45,6 +44,7 @@ char *pretty_freespace(const char *desc, unsigned long long *free_k, unsigned lo snprintf(result, bsize, "%s: none", desc); return result; } + bytesize = malloc(3 * sizeof(char)); while (total_space > 1023 && i <= 14) { i=i+3; @@ -61,6 +61,7 @@ char *pretty_freespace(const char *desc, unsigned long long *free_k, unsigned lo else snprintf(result, bsize, "%s: %.1f%s/%.1f%s free", desc, free_space, bytesize, total_space, bytesize); + free (bytesize); return result; } diff --git a/plugins/sysinfo/parse.c b/plugins/sysinfo/parse.c index fbca6213..c1b478f8 100644 --- a/plugins/sysinfo/parse.c +++ b/plugins/sysinfo/parse.c @@ -394,6 +394,7 @@ int xs_parse_distro(char *name) char keywords[bsize]; while(fgets(buffer, bsize, fp) != NULL) find_match_char(buffer, "ACCEPT_KEYWORDS", keywords); + /* cppcheck-suppress uninitvar */ if (strstr(keywords, "\"") == NULL) snprintf(buffer, bsize, "Gentoo Linux (stable)"); else @@ -440,16 +441,14 @@ int xs_parse_hwmon_chip(char *chip) int xs_parse_hwmon_temp(char *temp, unsigned int *sensor) { - unsigned int *value; + unsigned int value; float celsius; - value = malloc(sizeof(int)); if (!hwmon_chip_present()) return 1; else - get_hwmon_temp(value, sensor); - celsius = (float)*value; + get_hwmon_temp(&value, sensor); + celsius = (float)value; snprintf(temp, bsize, "%.1fC", celsius/1000.0); - free(value); return 0; } diff --git a/src/common/dcc.c b/src/common/dcc.c index d404b617..9014296e 100644 --- a/src/common/dcc.c +++ b/src/common/dcc.c @@ -322,6 +322,7 @@ dcc_lookup_proxy (char *host, struct sockaddr_in *addr) memcpy (&addr->sin_addr, h->h_addr, 4); memcpy (&cache_addr, h->h_addr, 4); cache_host = strdup (host); + /* cppcheck-suppress memleak */ return TRUE; } @@ -788,6 +789,7 @@ dcc_read (GIOChannel *source, GIOCondition condition, struct DCC *dcc) dcc_send_ack (dcc); dcc_close (dcc, STAT_DONE, FALSE); dcc_calc_average_cps (dcc); /* this must be done _after_ dcc_close, or dcc_remove_from_sum will see the wrong value in dcc->cps */ + /* cppcheck-suppress deallocuse */ sprintf (buf, "%d", dcc->cps); EMIT_SIGNAL (XP_TE_DCCRECVCOMP, dcc->serv->front_session, dcc->file, dcc->destfile, dcc->nick, buf, 0); @@ -1533,6 +1535,7 @@ dcc_handle_new_ack (struct DCC *dcc) dcc->ack = dcc->size; /* force 100% ack for >4 GB */ dcc_close (dcc, STAT_DONE, FALSE); dcc_calc_average_cps (dcc); /* this must be done _after_ dcc_close, or dcc_remove_from_sum will see the wrong value in dcc->cps */ + /* cppcheck-suppress deallocuse */ sprintf (buf, "%d", dcc->cps); EMIT_SIGNAL (XP_TE_DCCSENDCOMP, dcc->serv->front_session, file_part (dcc->file), dcc->nick, buf, NULL, 0); diff --git a/src/common/outbound.c b/src/common/outbound.c index a8a65d6a..f8f73dd6 100644 --- a/src/common/outbound.c +++ b/src/common/outbound.c @@ -1866,7 +1866,6 @@ cmd_exec (struct session *sess, char *tbuf, char *word[], char *word_eol[]) /* not reached unless error */ /*printf("exec error\n");*/ fflush (stdout); - fflush (stdin); _exit (0); } if (pid == -1) @@ -1876,6 +1875,7 @@ cmd_exec (struct session *sess, char *tbuf, char *word[], char *word_eol[]) PrintText (sess, "Error in fork(2)\n"); close(fds[0]); close(fds[1]); + free (s); } else { /* Parent path */ diff --git a/src/common/server.c b/src/common/server.c index 1fd04422..6ddaa18d 100644 --- a/src/common/server.c +++ b/src/common/server.c @@ -1678,6 +1678,7 @@ xit: #endif return 0; + /* cppcheck-suppress memleak */ } static void diff --git a/src/common/util.c b/src/common/util.c index 55cb530a..38537402 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1319,8 +1319,17 @@ int my_poptParseArgvString(const char * s, int * argcPtr, char *** argvPtr) { if (*argv[argc]) { buf++, argc++; if (argc == argvAlloced) { + char *temp[]; argvAlloced += POPT_ARGV_ARRAY_GROW_DELTA; - argv = realloc(argv, sizeof(*argv) * argvAlloced); + temp = realloc(argv, sizeof(*argv) * argvAlloced); + if (temp) + argv = temp; + else + { + free(argv); + free(bufStart); + return 1; + } } argv[argc] = buf; } diff --git a/src/fe-gtk/fkeys.c b/src/fe-gtk/fkeys.c index 99d244ea..3a937e1a 100644 --- a/src/fe-gtk/fkeys.c +++ b/src/fe-gtk/fkeys.c @@ -1153,6 +1153,7 @@ key_load_kbs (char *filename) get_xdir ()); fe_message (ibuf, FE_MSG_ERROR); free (ibuf); + free (kb); return 5; } diff --git a/src/fe-gtk/maingui.c b/src/fe-gtk/maingui.c index fee8f320..2dfb7b8d 100644 --- a/src/fe-gtk/maingui.c +++ b/src/fe-gtk/maingui.c @@ -1646,7 +1646,8 @@ mg_create_tabmenu (session *sess, GdkEventButton *event, chan *ch) mg_destroy_tab_cb, ch); if (sess && tabmenu_list) menu_create (menu, tabmenu_list, sess->channel, FALSE); - menu_add_plugin_items (menu, "\x4$TAB", sess->channel); + if (sess) + menu_add_plugin_items (menu, "\x4$TAB", sess->channel); if (event->window) gtk_menu_set_screen (GTK_MENU (menu), gdk_drawable_get_screen (event->window)); diff --git a/src/fe-text/fe-text.c b/src/fe-text/fe-text.c index bd9d2d1a..21db1bbd 100644 --- a/src/fe-text/fe-text.c +++ b/src/fe-text/fe-text.c @@ -116,7 +116,6 @@ fe_new_window (struct session *sess, int focus) #endif "\n\n", 0); fflush (stdout); - fflush (stdin); } static int @@ -506,6 +505,7 @@ fe_args (int argc, char *argv[]) *sl = 0; printf ("%s\\plugins\n", exe); } + free (exe); #else printf ("%s\n", HEXCHATLIBDIR"/plugins"); #endif From 672dbf75d6d3d47135be49568ebcce917d6c188c Mon Sep 17 00:00:00 2001 From: RichardHitt Date: Wed, 9 Jan 2013 14:53:19 -0800 Subject: [PATCH 2/3] Oops, fixed error in util.c --- src/common/util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/util.c b/src/common/util.c index 38537402..2319f75e 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1319,7 +1319,7 @@ int my_poptParseArgvString(const char * s, int * argcPtr, char *** argvPtr) { if (*argv[argc]) { buf++, argc++; if (argc == argvAlloced) { - char *temp[]; + char **temp; argvAlloced += POPT_ARGV_ARRAY_GROW_DELTA; temp = realloc(argv, sizeof(*argv) * argvAlloced); if (temp) From 475eb9fcaab1d846a3617f587f22bd77cdeddd5e Mon Sep 17 00:00:00 2001 From: RichardHitt Date: Thu, 10 Jan 2013 00:13:25 -0800 Subject: [PATCH 3/3] Fix crash by detecting NULL channel in url_join_only() and just returning. --- src/common/outbound.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/common/outbound.c b/src/common/outbound.c index f8f73dd6..8241d78f 100644 --- a/src/common/outbound.c +++ b/src/common/outbound.c @@ -3350,6 +3350,8 @@ static void url_join_only (server *serv, char *tbuf, char *channel) { /* already connected, JOIN only. FIXME: support keys? */ + if (channel == NULL) + return; tbuf[0] = '#'; /* tbuf is 4kb */ safe_strcpy ((tbuf + 1), channel, 256);