]> granicus.if.org Git - psmisc/commitdiff
killall: free regular expression list entries
authorJeff Smith <whydoubt@gmail.com>
Mon, 20 Mar 2017 19:24:40 +0000 (14:24 -0500)
committerJeff Smith <whydoubt@gmail.com>
Thu, 23 Mar 2017 16:49:07 +0000 (11:49 -0500)
Noticed when running tool in valgrind

src/killall.c

index a8e6d9a8b2c63fedfe86266f3e80ce7fa65feb4b..a51c1e9c3662dbd158178b148cb2d97df91d07e3 100644 (file)
@@ -219,6 +219,15 @@ match_process_uid(pid_t pid, uid_t uid)
        return re;
 }
 
+static void
+free_regexp_list(regex_t *reglist, int names)
+{
+       int i;
+       for (i = 0; i < names; i++)
+               regfree(&reglist[i]);
+       free(reglist);
+}
+
 static regex_t *
 build_regexp_list(int names, char **namelist)
 {
@@ -240,6 +249,7 @@ build_regexp_list(int names, char **namelist)
                if (regcomp(&reglist[i], namelist[i], flag) != 0) 
                {
                        fprintf(stderr, _("killall: Bad regular expression: %s\n"), namelist[i]);
+                       free_regexp_list(reglist, i);
                        exit (1);
                }
        }
@@ -626,7 +636,8 @@ kill_all (int signal, int name_count, char **namelist, struct passwd *pwent)
     }
     if (command)
        free(command);
-    free(reglist);
+    if (reglist)
+       free_regexp_list(reglist, name_count);
     free(pgids);
     if (!quiet)
        for (i = 0; i < name_count; i++)