changeset 1481:c0c91437138b draft

A few fixes for issues reported in static analysis.
author Ashwini Sharma <ak.ashwini1981.gmail.com>
date Thu, 18 Sep 2014 11:47:42 -0500
parents f0c4b7476118
children 44e72a07fedc
files toys/pending/bootchartd.c toys/pending/fsck.c toys/pending/init.c toys/pending/netstat.c
diffstat 4 files changed, 27 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/toys/pending/bootchartd.c	Wed Sep 17 20:21:44 2014 -0500
+++ b/toys/pending/bootchartd.c	Thu Sep 18 11:47:42 2014 -0500
@@ -82,7 +82,10 @@
       char *ptr;
       ssize_t len;
 
-      if ((len = readall(fd, toybuf, sizeof(toybuf)-1)) < 0) continue;
+      if ((len = readall(fd, toybuf, sizeof(toybuf)-1)) < 0) {
+        xclose(fd);
+        continue;
+      }
       toybuf[len] = '\0';
       close(fd);
       fputs(toybuf, fp);
@@ -226,10 +229,11 @@
   if ((kcmd_line_fd = open("/proc/cmdline", O_RDONLY)) != -1) {
     ssize_t len;
 
-    len = readall(kcmd_line_fd, toybuf, sizeof(toybuf)-1);
-    toybuf[len] = 0;
-    while (--len >= 0 && !toybuf[len]) continue;
-    for (; len > 0; len--) if (toybuf[len] < ' ') toybuf[len] = ' ';
+    if ((len = readall(kcmd_line_fd, toybuf, sizeof(toybuf)-1)) > 0) {
+      toybuf[len] = 0;
+      while (--len >= 0 && !toybuf[len]) continue;
+      for (; len > 0; len--) if (toybuf[len] < ' ') toybuf[len] = ' ';
+    } else *toybuf = 0;
   }
   fprintf(hdr_fp, "system.kernel.options = %s", toybuf);
   close(kcmd_line_fd);
--- a/toys/pending/fsck.c	Wed Sep 17 20:21:44 2014 -0500
+++ b/toys/pending/fsck.c	Thu Sep 18 11:47:42 2014 -0500
@@ -37,7 +37,7 @@
   char *t_list;
 
   struct double_list *devices;
-  int *arr_flag;
+  char *arr_flag;
   char **arr_type;
   int negate;
   int sum_status;
@@ -123,18 +123,20 @@
     n++;
   }
 
-  TT.arr_flag = xzalloc((n + 1) * sizeof(char));
+  TT.arr_flag = xzalloc(n + 1);
   TT.arr_type = xzalloc((n + 1) * sizeof(char *));
   s = TT.t_list;
   n = 0;
   while ((p = strsep(&s, ","))) {
     no = is_no_prefix(&p);
-    if (!strcmp(p, "loop")) TT.arr_flag[n] = no ? FLAG_WITH_NO_PRFX :FLAG_WITHOUT_NO_PRFX; 
-    else if (!strncmp(p, "opts=", 5)) {
+    if (!strcmp(p, "loop")) {
+      TT.arr_flag[n] = no ? FLAG_WITH_NO_PRFX :FLAG_WITHOUT_NO_PRFX;
+      TT.negate = no;
+    } else if (!strncmp(p, "opts=", 5)) {
       p+=5;
       TT.arr_flag[n] = is_no_prefix(&p) ?FLAG_WITH_NO_PRFX :FLAG_WITHOUT_NO_PRFX;
-    }
-    else {
+      TT.negate = no;
+    } else {
       if (!n) TT.negate = no;
       if (n && TT.negate != no) error_exit("either all or none of the filesystem"
           " types passed to -t must be prefixed with 'no' or '!'");
@@ -221,9 +223,9 @@
     return;
   } else { 
     if ((pid = fork()) < 0) {
+      perror_msg(args[0]);
       for (j=0;j<i;j++) free(args[i]);
       free(args);
-      perror_msg(args[0]);
       return; 
     }
     if (!pid) xexec(args); //child, executes fsck.type
--- a/toys/pending/init.c	Wed Sep 17 20:21:44 2014 -0500
+++ b/toys/pending/init.c	Thu Sep 18 11:47:42 2014 -0500
@@ -141,6 +141,8 @@
       line_number++;
       token_count = 0;
       action = 0;
+      tty_name = command = NULL;
+
       while ((extracted_token = strsep(&p,":"))) {
         token_count++;
         switch (token_count) {
@@ -172,8 +174,12 @@
       }  //while token
 
       if (q) free(q);
-      if (token_count != 4) continue; 
-      if (action) add_new_action(action, command, tty_name);  
+      if (token_count != 4) {
+        free(tty_name);
+        free(command);
+        continue;
+      }
+      if (action) add_new_action(action, command, tty_name);
       free(tty_name);
       free(command);
     } //while line
--- a/toys/pending/netstat.c	Wed Sep 17 20:21:44 2014 -0500
+++ b/toys/pending/netstat.c	Thu Sep 18 11:47:42 2014 -0500
@@ -468,6 +468,7 @@
     strcpy(path + length - (sizeof("cmdline")-1), "fd");
     progname = append_pathandfile(pid, (char *)get_basename(toybuf)); //e.g. progname = 2054/gnome-keyring-daemon
     extract_inode(path, progname);
+    free(progname);
   }//end of while.
   closedir(dp);