]> granicus.if.org Git - neomutt/commit
fix: strfcpy() improvement
authorRichard Russon <rich@flatcap.org>
Tue, 4 Oct 2016 12:19:09 +0000 (13:19 +0100)
committerRichard Russon <rich@flatcap.org>
Tue, 4 Oct 2016 12:19:14 +0000 (13:19 +0100)
commit1f6d5e4afb4e84cea4a0c35cbbcd2eed8c1a533b
tree8897121a7267882dcee960d6a93a6e07798475da
parent28dfa94e84d5f93d4502bf79fad8856171fd8afc
fix: strfcpy() improvement

A quick string copying history.

In the beginning was: strcpy (DST, SRC);
If the SRC was bigger than DST, then bad things happened.

Then came: strncpy (DST, SRC, LEN);
If SRC is longer than LEN, then the string in DST isn't NULL terminated.
Bad things happened.

Next, Mutt created a macro strfcpy() based on the BSD function.  It
guarantees a length limit AND a NULL termination.

    #define strfcpy(DST,SRC,LEN) strncpy(DST,SRC,LEN), *(DST+(LEN)-1)=0

Because of the way it works, it triggers a warning in Coverity (a static
analysis tool).  It fills DST (without NULL), then writes the NULL.

My testing shows it works correctly, but I may missed something.

    #define strfcpy(DST,SRC,LEN) do { if ((LEN) > 0) { *(DST+(LEN)-1)=0; strncpy(DST,SRC,(LEN)-1); } } while (0)
dotlock.c
lib.h
rfc822.c