From 58689d26839e44137b02fd50bc8214691e3efed8 Mon Sep 17 00:00:00 2001 From: Landry Breuil Date: Thu, 18 Dec 2014 22:57:52 +0100 Subject: [PATCH] Fix random crash on an ugly string handling in bsd backend. Replace an horrible strlcat loop + g_snprintf by g_strjoinv + g_strlcpy. Assert that the buffer is valid UTF8, blow otherwise. --- src/task-manager-bsd.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/task-manager-bsd.c b/src/task-manager-bsd.c index e8a06c7..0539f85 100644 --- a/src/task-manager-bsd.c +++ b/src/task-manager-bsd.c @@ -56,7 +56,7 @@ gboolean get_task_list (GArray *task_list) Task t; struct passwd *passwdp; char **args, **ptr; - char buf[127]; + gchar* buf; int nproc, i; mib[0] = CTL_KERN; @@ -132,14 +132,11 @@ gboolean get_task_list (GArray *task_list) break; } } - buf[0] = '\0'; - for (ptr = args; *ptr != NULL; ptr++) { - if (ptr != args) - strlcat(buf, " ", sizeof(buf)); - strlcat(buf, *ptr, sizeof(buf)); - } + buf = g_strjoinv(" ", args); + g_assert(g_utf8_validate(buf, -1, NULL)); + g_strlcpy(t.cmdline, buf, sizeof t.cmdline); + g_free(buf); free(args); - g_snprintf(t.cmdline, sizeof t.cmdline, "%s", buf); } t.cpu_user = (100.0 * ((double) p.p_pctcpu / FSCALE));