cvs commit: src/usr.sbin/setfmac setfmac.c

Robert Watson rwatson at FreeBSD.org
Sun Jan 27 02:51:18 PST 2008


On Sun, 27 Jan 2008, Yar Tikhiy wrote:

> The format strings in question might just have a bug in them. My guess is 
> that the author of the format strings feared that fts_path might not be 
> NUL-terminated, so he explicitly specified variable precision of 
> fts_pathlen; but he forgot to left-justify the field as well.
>
> In fact, fts_path in a fresh FTSENT just returned by fts_read() is always 
> NUL-terminated.  (See fts(3).)  Tricks with fts_pathlen are necessary only 
> if referring to old, saved FTSENTs, but this is dangerous and unportable 
> anyway.  setfmac seems to refer to fresh FTSENTs only, so the format can be 
> changed safely from "%.*s" to just "%s".  It will eliminate the fts_pathlen 
> arguments to the printf-like functions completely.
>
> It was Robert Watson who committed the lines to setfmac.c, according to cvs 
> annotate, so I added him to Cc:.
>
> Robert, do you think it's OK to simplify the format strings by changing 
> "%.*s" to "%s" along with removing the fts_pathlen arguments? E.g.:

I think Brian Feldman may have originally submitted this part of the code 
code, and likely it was a concern about nul-termination.  I'm fine with the 
change, especially if the concern about nul-termination was unfounded :-).

Robert N M Watson
Computer Laboratory
University of Cambridge

>
>                case FTS_NS:
> -                       err(1, "traversing %.*s", ftsent->fts_pathlen,
> -                           ftsent->fts_path);
> +                       err(1, "traversing %s", ftsent->fts_path);
>                default:
>
> Thanks!
>
> Yar
>


More information about the cvs-src mailing list