Don't change calls to strcpy() to strncpy(); use strlcpy() instead.
authorDan Cross <crossd@gmail.com>
Thu, 15 Oct 2015 21:13:58 +0000 (17:13 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 28 Oct 2015 16:24:04 +0000 (12:24 -0400)
The semantics of strncpy() are confusing. We had been
converting Plan 9 code to Akaros by replacing calls to
strcpy() (which we wisely removed from our kernel some
time ago), but strncpy():

1. Does not necessarily NUL-terminate it's destination
   buffer (e.g., if strlen(src) >= size),
2. Will nul-pad the entire destination string if the
   source string is shorter than the buffer length; this
   is wasteful if we just want proper NUL-termination.

Instead, call strlcpy(), which handles both of the above
cases correctly.

In general, one should not call strncpy() unless one is
sure that they want these semantics.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
scripts/plan9

index 01242e0..2e45f76 100644 (file)
@@ -4,7 +4,7 @@ sed -i 's/KERN_WAIT/KMALLOC_WAIT/g' $1
 sed -i 's/nelem/ARRAY_SIZE/g' $1
 
 # stuff I'm not smart enough to do with spatch
-sed -i '/strcpy.*(\(.*\),\(.*\));/s//strncpy(\1, \2, sizeof(\1));/' $1
+sed -i '/strcpy.*(\(.*\),\(.*\));/s//strlcpy(\1, \2, sizeof(\1));/' $1
 sed -i '/snprint(/s//snprintf(/' $1
 sed -i '/seprint(/s//seprintf(/' $1
 sed -i 's/[ \t][ \t]*QLock;/   qlock_t qlock;/' $1