Hi Matti, Matti Karnaattu wrote on Wed, Sep 24, 2014 at 12:10:47PM +0300:
> I noticed that chmod.c have uninitialized variable char *ep > that was used. Your analysis is wrong. The variable ep is explicitly initialized by strtoul() before being used in main(). > This diff clarify what I mean. Your diff is wrong. It breaks error detection. Try $ chmod 01x testfile without and with your diff. Yours, Ingo > Index: chmod.c > =================================================================== > RCS file: /OpenBSD/src/bin/chmod/chmod.c,v > retrieving revision 1.30 > diff -u -p -u -p -r1.30 chmod.c > --- chmod.c 21 May 2014 06:23:01 -0000 1.30 > +++ chmod.c 24 Sep 2014 08:47:58 -0000 > @@ -65,7 +65,7 @@ main(int argc, char *argv[]) > uid_t uid; > gid_t gid; > u_int32_t fclear, fset; > - char *ep, *mode, *cp, *flags; > + char *mode, *cp, *flags; > setlocale(LC_ALL, ""); > @@ -148,13 +148,11 @@ done: > flags = *argv; > if (*flags >= '0' && *flags <= '7') { > errno = 0; > - val = strtoul(flags, &ep, 8); > + val = strtoul(flags, (char *)NULL, 8); > if (val > UINT_MAX) > errno = ERANGE; > if (errno) > err(1, "invalid flags: %s", flags); > - if (*ep) > - errx(1, "invalid flags: %s", flags); > fset = val; > oct = 1; > } else { > @@ -167,13 +165,11 @@ done: > mode = *argv; > if (*mode >= '0' && *mode <= '7') { > errno = 0; > - val = strtol(mode, &ep, 8); > + val = strtol(mode, (char *)NULL, 8); > if (val > INT_MAX || val < 0) > errno = ERANGE; > if (errno) > err(1, "invalid file mode: %s", mode); > - if (*ep) > - errx(1, "invalid file mode: %s", mode); > omode = val; > oct = 1; > } else {