From 1ef3f462a3cfde20fafdda7e53610a9858f88350 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 25 Mar 2015 10:18:22 -0500 Subject: in get_user_label(), don't dereference a NULL real_name pointer --- src/service.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/service.c b/src/service.c index 445f1af..5d2449e 100644 --- a/src/service.c +++ b/src/service.c @@ -295,12 +295,18 @@ get_user_label (const IndicatorSessionUser * user) { const char * c; - /* If blank or whitespace, use username instead */ - for (c = user->real_name; *c != '\0' && g_ascii_isspace (*c); c++); - if (*c == '\0') - return user->user_name; + /* if real_name exists and isn't empty or whitespace, use it */ + c = user->real_name; + if (c != NULL) + { + while ((*c != '\0') && g_ascii_isspace(*c)) /* walk past whitespace */ + ++c; + if (*c != '\0') + return user->real_name; + } - return user->real_name; + /* otherwise, use this as a fallback */ + return user->user_name; } static const char * -- cgit v1.2.3 From 572cdb85a58bc0fb7632333ef8c390649d28714f Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 25 Mar 2015 17:25:41 -0500 Subject: use unichar rather than ascii --- src/service.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/service.c b/src/service.c index 5d2449e..6fddd7a 100644 --- a/src/service.c +++ b/src/service.c @@ -295,14 +295,17 @@ get_user_label (const IndicatorSessionUser * user) { const char * c; - /* if real_name exists and isn't empty or whitespace, use it */ + /* if real_name exists and is printable, use it */ c = user->real_name; - if (c != NULL) + if ((c != NULL) && g_utf8_validate(c, -1, NULL)) { - while ((*c != '\0') && g_ascii_isspace(*c)) /* walk past whitespace */ - ++c; - if (*c != '\0') - return user->real_name; + while (*c != '\0') + { + if (g_unichar_isgraph(g_utf8_get_char(c))) + return c; + + c = g_utf8_next_char(c); + } } /* otherwise, use this as a fallback */ -- cgit v1.2.3 From c83ee3f1bc5a9de5eefbc542f5734b481d0bbffd Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 25 Mar 2015 17:30:30 -0500 Subject: if someone has control codes in their real name, who are we do disagree? --- src/service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service.c b/src/service.c index 6fddd7a..9fda2f1 100644 --- a/src/service.c +++ b/src/service.c @@ -302,7 +302,7 @@ get_user_label (const IndicatorSessionUser * user) while (*c != '\0') { if (g_unichar_isgraph(g_utf8_get_char(c))) - return c; + return user->real_name; c = g_utf8_next_char(c); } -- cgit v1.2.3