From 1cf9e989c1a86e8342f4e9cab6c43f86198c88ee Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 30 Jun 2015 14:05:44 +0200 Subject: [PATCH] core: fix memleak in nm_utils_get_start_time_for_pid() and parsing start-time It was leaking @tokens in case of error. Also the error checking of start-time with strtoull() was erroneous. (cherry picked from commit 67057079a433a60523d0937b075b4203b4730c63) --- src/NetworkManagerUtils.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c index 943a2c98fb..4b17afa046 100644 --- a/src/NetworkManagerUtils.c +++ b/src/NetworkManagerUtils.c @@ -317,10 +317,10 @@ guint64 nm_utils_get_start_time_for_pid (pid_t pid, char *out_state) { guint64 start_time; - gchar *filename; - gchar *contents; + gs_free gchar *filename = NULL; + gs_free gchar *contents = NULL; size_t length; - gchar **tokens; + gs_strfreev gchar **tokens = NULL; guint num_tokens; gchar *p; gchar *endp; @@ -356,19 +356,15 @@ nm_utils_get_start_time_for_pid (pid_t pid, char *out_state) if (num_tokens < 20) goto out; + errno = 0; start_time = strtoull (tokens[19], &endp, 10); - if (endp == tokens[19]) - goto out; + if (*endp != '\0' || errno != 0) + start_time = 0; - g_strfreev (tokens); - - out: +out: if (out_state) *out_state = state; - g_free (filename); - g_free (contents); - return start_time; }