Re: [PATCH 2.6]: IPv6: strcpy -> strlcpy

From: YOSHIFUJI Hideaki / 吉藤英明
Date: Thu Nov 27 2003 - 19:58:33 EST


In article <20031128.092642.47232575.yoshfuji@xxxxxxxxxxxxxx> (at Fri, 28 Nov 2003 09:26:42 +0900 (JST)), YOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@xxxxxxxxxxxxxx> says:

> > 3) if (len)
> > strncpy(dst, src, len - 1);
> > dst[len] = 0;

grr, another mistake...:

if (len) {
strncpy(dst, src, len - 1);
dst[len - 1];
}

----------------
1) use strlcpy0(dst, src, len)

size_t strlcpy0(char *dst, const char *src, size_t maxlen)
{
size_t len = strlcpy(dst, src, maxlen);
if (likely(maxlen != 0) && len < maxlen - 1)
memset(dst + len + 1, 0, maxlen - len - 1);
}

2a) use strncpy0(dst, src, len)

char *strncpy0(char *dst, const char *src, size_t maxlen)
{
memset(dst, 0, maxlen);
if (likely(maxlen != 0))
strncpy(dst, src, maxlen - 1);
}

2b) fix strncpy() to zero-out rest of destination buffer
and use strncpy0(dst, src, len)

char *strncpy0(char *dst, const char *src, size_t maxlen)
{
if (likely(maxlen != 0)) {
strncpy(dst, src, maxlen - 1);
dst[maxlen - 1] = 0;
}
}


I prefer 1 > 2b >> 2a.

--yoshfuji
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/