From 40a3e65803a87770138d49acf79da33398497f6a Mon Sep 17 00:00:00 2001 From: rim Date: Tue, 29 May 2018 02:47:00 +0300 Subject: [PATCH] Fix possible file descriptor leak on linux (bug 14401) --- src/task-manager-linux.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/task-manager-linux.c b/src/task-manager-linux.c index 71d5ca0..a62c5a0 100644 --- a/src/task-manager-linux.c +++ b/src/task-manager-linux.c @@ -71,8 +71,13 @@ get_cpu_usage (gushort *cpu_count, gfloat *cpu_user, gfloat *cpu_system) static gulong jiffies_user_old = 0, jiffies_system_old = 0, jiffies_total_old = 0; gulong user = 0, user_nice = 0, system = 0, idle = 0; - if ((file = fopen (filename, "r")) == NULL || fgets (buffer, sizeof(buffer), file) == NULL) + if ((file = fopen (filename, "r")) == NULL) return FALSE; + if (fgets (buffer, sizeof(buffer), file) == NULL) + { + fclose (file); + return FALSE; + } sscanf (buffer, "cpu\t%lu %lu %lu %lu", &user, &user_nice, &system, &idle); @@ -195,8 +200,13 @@ get_task_details (GPid pid, Task *task) gchar buffer[1024]; snprintf (filename, sizeof(filename), "/proc/%d/stat", pid); - if ((file = fopen (filename, "r")) == NULL || fgets (buffer, sizeof(buffer), file) == NULL) + if ((file = fopen (filename, "r")) == NULL) return FALSE; + if (fgets (buffer, sizeof(buffer), file) == NULL) + { + fclose (file); + return FALSE; + } fclose (file); bzero(task, sizeof(Task));