]> diplodocus.org Git - nmh/commitdiff
Check return values of system calls in uip/ and test/ .c files, found
authorDavid Levine <levinedl@acm.org>
Sat, 6 Sep 2014 13:00:52 +0000 (08:00 -0500)
committerDavid Levine <levinedl@acm.org>
Sat, 6 Sep 2014 13:00:52 +0000 (08:00 -0500)
with gcc's -D_FORTIFY_SOURCE=2.

18 files changed:
test/fakepop.c
test/fakesmtp.c
uip/comp.c
uip/dropsbr.c
uip/forw.c
uip/install-mh.c
uip/mhlsbr.c
uip/mhshowsbr.c
uip/new.c
uip/popsbr.c
uip/rcvtty.c
uip/refile.c
uip/replsbr.c
uip/rmf.c
uip/sendsbr.c
uip/slocal.c
uip/whatnowproc.c
uip/whatnowsbr.c

index a03034583c764a354c43239e8d449d1e0264ccd8..4d023545a43b0a54cbdfe888e834f19a9c860499 100644 (file)
@@ -358,7 +358,9 @@ putpop(int socket, char *data)
        iov[1].iov_base = "\r\n";
        iov[1].iov_len = 2;
 
-       writev(socket, iov, 2);
+       if (writev(socket, iov, 2) < 0) {
+           perror ("writev");
+       }
 }
 
 /*
@@ -371,7 +373,9 @@ putpopbulk(int socket, char *data)
 {
        ssize_t datalen = strlen(data);
 
-       write(socket, data, datalen);
+       if (write(socket, data, datalen) < 0) {
+           perror ("write");
+       }
 }
 
 /*
index 7121c30211df5cd1c980a6f75b3fe8fd9ab19b07..b812f23e2e24682ba516da1ea9d207500f0aff1f 100644 (file)
@@ -263,7 +263,9 @@ putsmtp(int socket, char *data)
        iov[1].iov_base = "\r\n";
        iov[1].iov_len = 2;
 
-       writev(socket, iov, 2);
+       if (writev(socket, iov, 2) < 0) {
+           perror ("writev");
+       }
 }
 
 /*
index 2f7da4166c36466e0623891c5b54c0f7d978b123..13d73c1bc27c2b201f83e2188c5cd0045004f467 100644 (file)
@@ -381,7 +381,10 @@ try_it_again:
        dat[3] = outputlinelen;
        dat[4] = 0;
        fmt_scan(fmt, scanl, i, dat, NULL);
-       write(out, charstring_buffer (scanl), charstring_bytes (scanl));
+       if (write(out, charstring_buffer (scanl),
+                 charstring_bytes (scanl)) < 0) {
+           advise (drft, "write");
+       }
        charstring_free(scanl);
     } else {
        cpydata (in, out, form, drft);
index 915e71e6c73e09328cb8740d5196720639cb2b9a..dee95fe702a157ebcd084eecbedb0aae4cb67d64 100644 (file)
@@ -80,8 +80,12 @@ mbx_open (char *file, int mbx_style, uid_t uid, gid_t gid, mode_t mode)
         * The stat failed.  So we make sure file
         * has right ownership/modes
         */
-       chown (file, uid, gid);
-       chmod (file, mode);
+       if (chown (file, uid, gid) < 0) {
+           advise (file, "chown");
+       }
+       if (chmod (file, mode) < 0) {
+           advise (file, "chmod");
+       }
     } else if (st.st_size > (off_t) 0) {
        int status;
 
@@ -396,7 +400,9 @@ mbx_copy (char *mailbox, int mbx_style, int md, int fd,
                 * "From ", then prepend line with ">".
                 */
                if (j != 0 && strncmp (buffer, "From ", 5) == 0) {
-                   write (md, ">", 1);
+                   if (write (md, ">", 1) < 0) {
+                       advise (mailbox, "write");
+                   }
                    size++;
                }
                i = strlen (buffer);
index 2139d35cffa5a8c5c1bbf17fe253f64ef4ca8d42..d3fd4238b0826f5daab39d39499b9da681d111d6 100644 (file)
@@ -599,7 +599,9 @@ copy_draft (int out, char *digest, char *file, int volume, int issue, int dashst
 
                strncpy (bp, "\n\n", buflen);
            }
-           write (out, buffer, strlen (buffer));
+           if (write (out, buffer, strlen (buffer)) < 0) {
+               advise (drft, "write");
+           }
 
            if ((fd = open (msgnam = m_name (msgnum), O_RDONLY)) == NOTOK) {
                admonish (msgnam, "unable to read message");
@@ -626,7 +628,9 @@ copy_draft (int out, char *digest, char *file, int volume, int issue, int dashst
        snprintf (buffer, sizeof(buffer), "\n------- End of Forwarded Message%s\n",
                mp->numsel > 1 ? "s" : "");
     }
-    write (out, buffer, strlen (buffer));
+    if (write (out, buffer, strlen (buffer)) < 0) {
+       advise (drft, "write");
+    }
 
     if (digest) {
        snprintf (buffer, sizeof(buffer), "End of %s Digest [Volume %d Issue %d]\n",
@@ -636,7 +640,9 @@ copy_draft (int out, char *digest, char *file, int volume, int issue, int dashst
            *bp++ = '*';
        *bp++ = '\n';
        *bp = 0;
-       write (out, buffer, strlen (buffer));
+       if (write (out, buffer, strlen (buffer)) < 0) {
+           advise (drft, "write");
+       }
     }
 }
 
@@ -653,11 +659,17 @@ copy_mime_draft (int out)
 
     snprintf (buffer, sizeof(buffer), "#forw [forwarded message%s] +%s",
        mp->numsel == 1 ? "" : "s", mp->foldpath);
-    write (out, buffer, strlen (buffer));
+    if (write (out, buffer, strlen (buffer)) < 0) {
+       advise (drft, "write");
+    }
     for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
        if (is_selected (mp, msgnum)) {
            snprintf (buffer, sizeof(buffer), " %s", m_name (msgnum));
-           write (out, buffer, strlen (buffer));
+           if (write (out, buffer, strlen (buffer)) < 0) {
+               advise (drft, "write");
+           }
        }
-    write (out, "\n", 1);
+    if (write (out, "\n", 1) < 0) {
+       advise (drft, "write newline");
+    }
 }
index 12377352a8c71ea6c4ca5fc824602d938fc4d0f2..2240f870d226da6c2a8e942fb8e010bc113cb778 100644 (file)
@@ -166,7 +166,9 @@ query:
        }
     }
 
-    chdir (mypath);
+    if (chdir (mypath) < 0) {
+       advise (mypath, "chdir");
+    }
     if (chdir (pathname) == NOTOK) {
        cp = concat ("\"", pathname, "\" doesn't exist; Create it? ", NULL);
        if (autof || gans (cp, anoyes))
index 3a53941d8df13c211e3c0675574537bf083f882f..0c9719c2d2cd5b5d2a961e6c519b2f3d2805527e 100644 (file)
@@ -973,7 +973,9 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec)
                    }
                    fflush (stdout);
                    buf[0] = 0;
-                   read (fileno (stdout), buf, sizeof(buf));
+                   if (read (fileno (stdout), buf, sizeof(buf)) < 0) {
+                       advise ("stdout", "read");
+                   }
                }
                if (strchr(buf, '\n')) {
                    if ((global.c_flags & CLEARSCR))
@@ -1487,7 +1489,9 @@ putch (char ch, long flags)
                putchar ('\007');
            fflush (stdout);
            buf[0] = 0;
-           read (fileno (stdout), buf, sizeof(buf));
+           if (read (fileno (stdout), buf, sizeof(buf)) < 0) {
+               advise ("stdout", "read");
+           }
            if (strchr(buf, '\n')) {
                if (global.c_flags & CLEARSCR)
                    nmh_clear_screen ();
@@ -1719,7 +1723,9 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, FILE *fp,
 
        while (state == BODY) {
            int bufsz2 = bufsz;
-           write(fdinput[1], buf, strlen(buf));
+           if (write(fdinput[1], buf, strlen(buf)) < 0) {
+               advise ("pipe output", "write");
+           }
            state = m_getfld (&gstate, name, buf, &bufsz2, fp);
        }
 
index d99f58273a506129db7ae14361bd676bc6d718a2..61f041205926edb4f12cf9eb9883d9cf76280ab2 100644 (file)
@@ -465,8 +465,11 @@ show_content_aux2 (CT ct, int alternate, char *cracked, char *buffer,
            return NOTOK;
 
        case OK:
-           if (cracked)
-               chdir (cracked);
+           if (cracked) {
+               if (chdir (cracked) < 0) {
+                   advise (cracked, "chdir");
+               }
+           }
            if (!xstdin)
                dup2 (fd, 0);
            close (fd);
@@ -1101,7 +1104,10 @@ iconv_start:
                     status = NOTOK;
                     break;
                 } else {
-                    write (fd, dest_buffer, outbytes_before - outbytes);
+                    if (write (fd, dest_buffer, outbytes_before - outbytes)
+                        < 0) {
+                        advise (dest, "write");
+                    }
                 }
             }
 
index bdbdc73f127eb8a2a8af1c14ae259764d7c18a21..2bb8c17a2ae954065b1d71a0dbe2a851a9687325 100644 (file)
--- a/uip/new.c
+++ b/uip/new.c
@@ -261,7 +261,9 @@ check_folders(struct node **first, struct node **last,
     b.sequences = sequences;
 
     if (folders == NULL) {
-       chdir(m_maildir(""));
+       if (chdir(m_maildir("")) < 0) {
+           advise (m_maildir(""), "chdir");
+       }
        crawl_folders(".", crawl_callback, &b);
     } else {
        fp = fopen(folders, "r");
@@ -386,7 +388,9 @@ doit(char *cur, char *folders, char *sequences[])
            /* TODO: Split enough of scan.c out so that we can call it here. */
            command = concat("scan +", node->n_name, " ", sequences_s,
                             (void *)NULL);
-           system(command);
+           if (system(command) == NOTOK) {
+               adios (command, "system");
+           }
            free(command);
         } else {
             if (node->n_field == NULL) {
index 479fdb1f6688a4425e1634513cffcf4beea16a66..8334dee6f92e5cadbaf3c58aa6bca04540cf0f00 100644 (file)
@@ -487,8 +487,12 @@ pop_init (char *host, char *port, char *user, char *pass, char *proxy,
        int inpipe[2];    /* for reading from the server */
        int outpipe[2];    /* for sending to the server */
 
-       pipe(inpipe);
-       pipe(outpipe);
+       if (pipe(inpipe) < 0) {
+          adios ("inpipe", "pipe");
+       }
+       if (pipe(outpipe) < 0) {
+          adios ("outpipe", "pipe");
+       }
 
        pid=fork();
        if (pid==0) {
index c3fe470e7da937241ca23154d7885255089f2da3..24a931b7243181692882850d51da93c57d60bf4a 100644 (file)
@@ -265,12 +265,20 @@ header_fd (void)
     nfs = new_fs (form, format, SCANFMT);
     scan (stdin, 0, 0, nfs, width, 0, 0, NULL, 0L, 0, &scanl);
     scan_finished ();
-    if (newline)
-        write (fd, "\n\r", 2);
-    write (fd, charstring_buffer (scanl), charstring_bytes (scanl));
+    if (newline) {
+       if (write (fd, "\n\r", 2) < 0) {
+           advise (tfile, "write LF/CR");
+       }
+    }
+    if (write (fd, charstring_buffer (scanl), charstring_bytes (scanl)) < 0) {
+       advise (tfile, "write");
+    }
     charstring_free (scanl);
-    if (bell)
-        write (fd, "\007", 1);
+    if (bell) {
+        if (write (fd, "\007", 1) < 0) {
+           advise (tfile, "write BEL");
+        }
+    }
 
     return fd;
 }
index cd352a40939fe0a02dd78c696f13727fe8946def..5d03d4d18569463807f9153ecdf760a5b0a3382e 100644 (file)
@@ -279,7 +279,9 @@ opnfolds (struct msgs *src_folder, struct st_fold *folders, int nfolders)
     register struct msgs *mp;
 
     for (fp = folders, ep = folders + nfolders; fp < ep; fp++) {
-       chdir (m_maildir (""));
+       if (chdir (m_maildir ("")) < 0) {
+           advise (m_maildir (""), "chdir");
+       }
        strncpy (nmaildir, m_maildir (fp->f_name), sizeof(nmaildir));
 
        /*
@@ -302,7 +304,9 @@ opnfolds (struct msgs *src_folder, struct st_fold *folders, int nfolders)
            fp->f_mp = src_folder;
        }
 
-       chdir (maildir);
+       if (maildir[0] != '\0'  &&  chdir (maildir) < 0) {
+           advise (maildir, "chdir");
+       }
     }
 }
 
index aec090fe043f44661525b082eed7c95dccb38e94..c4ca0c4b2f86d23b3ad3b9ae1040a8db4c2065d7 100644 (file)
@@ -469,11 +469,13 @@ replfilter (FILE *in, FILE *out, char *filter, int fmtproc)
 
            execvp (mhl, arglist);
            errstr = strerror(errno);
-           write(2, "unable to exec ", 15);
-           write(2, mhlproc, strlen(mhlproc));
-           write(2, ": ", 2);
-           write(2, errstr, strlen(errstr));
-           write(2, "\n", 1);
+           if (write(2, "unable to exec ", 15) < 0  ||
+               write(2, mhlproc, strlen(mhlproc)) < 0  ||
+               write(2, ": ", 2) < 0  ||
+               write(2, errstr, strlen(errstr)) < 0  ||
+               write(2, "\n", 1) < 0) {
+               advise ("stderr", "write");
+           }
            _exit (-1);
 
        default: 
index bb03805a1b1300fb5e3dd344b456133c131a1e79..c7e6426c130b46d0dd7e9f016702e7b4f4d8d34f 100644 (file)
--- a/uip/rmf.c
+++ b/uip/rmf.c
@@ -193,7 +193,9 @@ rmf (char *folder)
      */
     rma (folder);
 
-    chdir ("..");
+    if (chdir ("..") < 0) {
+       advise ("..", "chdir");
+    }
     if (others == 0 && remdir (maildir))
        return OK;
 
index 020949d0a40894bf918ba8b3721262a8ee1463b2..af9412dfe9da9fc191aad552e831a0e0432c488a 100644 (file)
@@ -498,13 +498,19 @@ alert (char *file, int out)
                } else {
                    lseek (out, (off_t) 0, SEEK_END);
                    strncpy (buf, "\nMessage not delivered to anyone.\n", sizeof(buf));
-                   write (out, buf, strlen (buf));
+                   if (write (out, buf, strlen (buf)) < 0) {
+                       advise (file, "write");
+                   }
                    strncpy (buf, "\n------- Unsent Draft\n\n", sizeof(buf));
-                   write (out, buf, strlen (buf));
+                   if (write (out, buf, strlen (buf)) < 0) {
+                       advise (file, "write");
+                   }
                    cpydgst (in, out, file, "temporary file");
                    close (in);
                    strncpy (buf, "\n------- End of Unsent Draft\n", sizeof(buf));
-                   write (out, buf, strlen (buf));
+                   if (write (out, buf, strlen (buf)) < 0) {
+                       advise (file, "write");
+                   }
                    if (rename (file, strncpy (buf, m_backup (file), sizeof(buf))) == NOTOK)
                        admonish (buf, "unable to rename %s to", file);
                }
@@ -597,7 +603,9 @@ anno (int fd, struct stat *st)
            /* reset the signal mask */
            sigprocmask (SIG_SETMASK, &oset, &set);
 
-           chdir (cwd);
+           if (chdir (cwd) < 0) {
+               advise (cwd, "chdir");
+           }
            break;
 
        default:                /* no waiting... */
index 8afef253c815a8204b8b64e87e5ee3cf6daabf92..a26432c5da36e53f27b6bfc8fec02c770d411f8d 100644 (file)
@@ -279,7 +279,9 @@ main (int argc, char **argv)
        adios (NULL, "no such local user as %s", user);
 
     if (chdir (pw->pw_dir) == -1)
-       chdir ("/");
+       if (chdir ("/") < 0) {
+           advise ("/", "chdir");
+       }
     umask (0077);
 
     if (geteuid() == 0) {
@@ -1067,8 +1069,12 @@ usr_pipe (int fd_arg, char *cmd, char *pgm, char **vec, int suppress)
            /* child process */
            if (fd != 0)
                dup2 (fd, 0);
-           freopen ("/dev/null", "w", stdout);
-           freopen ("/dev/null", "w", stderr);
+           if (freopen ("/dev/null", "w", stdout) == NULL) {
+               advise ("stdout", "freopen");
+           }
+           if (freopen ("/dev/null", "w", stderr) == NULL) {
+               advise ("stderr", "freopen");
+           }
            if (fd != 3)
                dup2 (fd, 3);
            closefds (4);
index 05dc8ff3f67bcb896d86201a1fe88f224f038304..8fc6ee727e185d628bfc751a48fa4745836c28bf 100644 (file)
@@ -99,8 +99,11 @@ what_now (char *ed, int nedit, int use, char *file, char *altmsg, int dist,
     context_save ();   /* save the context file */
     fflush (stdout);
 
-    if (cwd)
-       chdir (cwd);
+    if (cwd) {
+       if (chdir (cwd) < 0) {
+           advise (cwd, "chdir");
+       }
+    }
 
     /*
      * If the "whatnowproc" is the nmh command "whatnow",
index 6e08d3eba0935871544ec2003c2c797d6825ade7..2c2d2043bd5dfc508aa80e7f227e9bcfbfc62cd2 100644 (file)
@@ -321,7 +321,9 @@ WhatNow (int argc, char **argv)
                writesomecmd(buf, BUFSIZ, "cd", "pwd", argp);
            }
            if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) {
-               fgets(cwd, sizeof (cwd), f);
+               if (fgets(cwd, sizeof (cwd), f) == NULL) {
+                   advise (buf, "fgets");
+               }
 
                if (strchr(cwd, '\n') != (char *)0)
                        *strchr(cwd, '\n') = '\0';
@@ -691,7 +693,9 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp,
        if (atfile) {
            (void) m_unlink (linkpath);
            if (link (altpath, linkpath) == NOTOK) {
-               symlink (altpath, linkpath);
+               if (symlink (altpath, linkpath) < 0) {
+                   adios (linkpath, "symlink");
+               }
                slinked = 1;
            } else {
                slinked = 0;
@@ -709,8 +713,11 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp,
            break;
 
        case OK:
-           if (cwd)
-               chdir (cwd);
+           if (cwd) {
+               if (chdir (cwd) < 0) {
+                   advise (cwd, "chdir");
+               }
+           }
            if (altmsg) {
                if (mp)
                    m_putenv ("mhfolder", mp->foldpath);