Re: strcpy, strlcpy.
yas@is.tsukuba.ac.jp (Yasushi Shinjo) wrote in message news:<YAS.04May3182956@kirk.is.tsukuba.ac.jp>...
> > strcpy → strlcpy の書き替えとは違いますが, やっちゃいそうな間違いと言
> > うと
> > void
> > foo (char *d, const char *s)
> > {
> > …;
> > if (strlcpy (d, s, sizeof d) == sizeof d)
> > むにゃむにゃ;
> > …;
> > }
> > なんていうのも思いつきます.
>
> これは、strcpy() でも問題があるプログラムですよね。
>
> foo (char *d, const char *s)
> {
> …;
> strcpy(d, s);
> むにゃむにゃ;
> …;
> }
>
> この strcpy() を strlcpy() に書き換える時に、「あ、d の長さ
> がない」と気が付くはずです。これでバグが1つ減ります。
>
いや、それで、ヘボいプログラマが、d の長さがないと気付かずに、
strcpy(d, s) => strlcpy(d, s, sizeof d)
ならおっけいね、と目の不自由な的にやってしまうのが
問題なのではないでしょうか。ちょっと極端ですけど...
それよりもっとあり得そうなのは、
> strcpy → strlcpy の書き替えとは違
う例として、
foo(const char s)
{
static char d[SIZE];
…;
if (strlcpy (d, s, sizeof d) == sizeof d)
むにゃむにゃ;
…;
return d;
}
を、「あ、dを引き数にするよう仕様変更ね、」
といって以下の様にしちゃう場合が考えられます。
> > foo (char *d, const char *s)
> > {
> > …;
> > if (strlcpy (d, s, sizeof d) == sizeof d)
> > むにゃむにゃ;
> > …;
> > }
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735