Skip to content
  • Jeff King's avatar
    banned.h: mark strncpy() as banned · e488b7ab
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    The strncpy() function is less horrible than strcpy(), but
    is still pretty easy to misuse because of its funny
    termination semantics. Namely, that if it truncates it omits
    the NUL terminator, and you must remember to add it
    yourself. Even if you use it correctly, it's sometimes hard
    for a reader to verify this without hunting through the
    code. If you're thinking about using it, consider instead:
    
      - strlcpy() if you really just need a truncated but
        NUL-terminated string (we provide a compat version, so
        it's always available)
    
      - xsnprintf() if you're sure that what you're copying
        should fit
    
      - strbuf or xstrfmt() if you need to handle
        arbitrary-length heap-allocated strings
    
    Note that there is one instance of strncpy in
    compat/regex/regcomp.c, which is fine (it allocates a
    sufficiently large string before copying). But this doesn't
    trigger the ban-list even when compiling with NO_REGEX=1,
    because:
    
      1. we don't use git-compat-util.h when compiling it
         (instead we rely on the system includes from the
         upstream library); and
    
      2. It's in an "#ifdef DEBUG" block
    
    Since it's doesn't trigger the banned.h code, we're better
    off leaving it to keep our divergence from upstream minimal.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    e488b7ab