[mew-dist 19903] Re: strcpy()

SAKAI Kiyotaka ksakai at example.com
2001年 12月 21日 (金) 15:49:30 JST


>> In article <20011214.170133.08338948.y-koga at example.com>, Koga Youichirou <y-koga at example.com> writes:

> Kazu Yamamoto <kazu at example.com> (山本和彦):
>> mewls で strcpy() を使っています。安全を期して、strncpy() に変える方が
>> いいでしょうか?

> core を吐くようならださいですけど、今のコードでは strcpy() 部分に
> ついては溢れないように見えます。

同感です。まっとうな OS であれば溢れないと思います。

もし問題が発生する環境があるとすれば、

  #ifdef PATH_MAX
  # define MAX_FILE_NAME_LEN PATH_MAX
  #else
  # define MAX_FILE_NAME_LEN 1024
  #endif

というコードから判断して、

  1. PATH_MAX が OS のヘッダファイルで定義されていない。
  2. その OS で使えるパス名の長さが 1024 を越えている。
  3. ユーザーが 1024 文字を越える長さのフォルダを作成した。

という条件をすべて満たす場合だけだと思います。

それでも安全を期すとすれば、単純に strcpy() を strncpy() に置換すると
動作が変わってしまう可能性がありますので、それよりは溢れそうなときは 
エラーメッセージを出して exit() する方がいいと思います。
-- 
酒井 清隆 (E-mail: ksakai at example.com)



Mew-dist メーリングリストの案内