From: Ralph Corderoy Date: Mon, 18 Sep 2017 11:43:28 +0000 (+0100) Subject: whom.c: Don't call rename(2) with source that's uninitialised. X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/a27d1ec492f69d93a13821a0f236f0691d8683a3?ds=sidebyside whom.c: Don't call rename(2) with source that's uninitialised. The intent is that two rename(2)s take place: to move a file to a backup and then return it. The first test controlled the generation of the destination in the char array `backup' and calling the first rename(). The second test used that same array for the restoring rename(), but used a different test and so could run when the first rename hadn't, and with an uninitialised array for the source filename. The initialisation of `backup' and the first rename needed both environment variables `mhdist' and `mhaltmsg' to be non-empty, and the former to have a non-zero atoi(3) value. The second rename ignored `mhaltmsg'. Bug pre-dates git. --- diff --git a/uip/whom.c b/uip/whom.c index f0eee7ef..00af980c 100644 --- a/uip/whom.c +++ b/uip/whom.c @@ -59,7 +59,8 @@ main (int argc, char **argv) { pid_t child_id = OK; int status, isdf = 0; - int distsw = 0, vecp = 0; + int vecp = 0; + bool distsw; char *cp, *dfolder = NULL, *dmsg = NULL; char *msg = NULL, **ap, **argp, backup[BUFSIZ]; char buf[BUFSIZ], **arguments, *vec[MAXARGS]; @@ -166,11 +167,10 @@ main (int argc, char **argv) cp = getcpy (m_draft (dfolder, dmsg, 1, &isdf)); msg = vec[vecp++] = cp; } - if ((cp = getenv ("mhdist")) - && *cp - && (distsw = atoi (cp)) - && (cp = getenv ("mhaltmsg")) - && *cp) { + + distsw = (cp = getenv("mhdist")) && *cp && atoi(cp) && + (cp = getenv("mhaltmsg")) && *cp; + if (distsw) { if (distout (msg, cp, backup) == NOTOK) done (1); vec[vecp++] = "-dist";