Path: ccsf.homeunix.org!ccsf.homeunix.org!news1.wakwak.com!nf1.xephion.ne.jp!onion.ish.org!gcd.org!onodera-news!newsfeed.media.kyoto-u.ac.jp!oix.u-ryukyu.ac.jp!u-ryukyu.ac.jp!ie.u-ryukyu.ac.jp!gama.is.tsukuba.ac.jp!yas From: yas@is.tsukuba.ac.jp (Yasushi Shinjo) Newsgroups: fj.comp.lang.c Subject: Re: strcpy, strlcpy. Date: 21 Feb 2004 14:53:37 GMT Organization: Institute of Information Sciences and Electronics, University of Tsukuba Lines: 44 Message-ID: References: NNTP-Posting-Host: kirk.hlla.is.tsukuba.ac.jp X-Trace: gama.is.tsukuba.ac.jp 1077375124 20404 130.158.85.129 (21 Feb 2004 14:52:04 GMT) X-Complaints-To: usenet@gama.is.tsukuba.ac.jp NNTP-Posting-Date: 21 Feb 2004 14:52:04 GMT In-reply-to: dohzono@hf.rim.or.jp's message of 21 Feb 2004 11:07:31 GMT Xref: ccsf.homeunix.org fj.comp.lang.c:234 新城@筑波大学情報です。こんにちは。 古い記事が読まれると、新しい記事よりも嬉しいですね。いい記事 だったんだなあという感じがして。 In article dohzono@hf.rim.or.jp (Kazuo Fox DOHZONO) writes: > つらつらとその理由を考えてみたのですが, 要するに strcpy では問題のある > ようなアプリケーションが, strlcpy によって直ちに正しく動作するようにな > るわけではない, ということかな. > > ・ほとんどの場合その前にチェック出来るハズ. はい。それはそうです。strlcpy() は、バッファ・オーバーフロー を起さないという目的で使うものです。strlcpy() を使ったからと いって、間違ったプログラムが「正しく」動作するようになるわけ ではありません。 > 何も考えずに strlcpy 使って, 長さを越えた場合に適当に truncate とかす > る人がいたりすると, "foobar" で登録したデータが "foobar" でも "foo" で > も読めてしまうといった問題が紛れ込んだりするかもしれません. > それよりはテストで落ちてもらった方がありがたいと思うのですが. テストでは、バッファ・オーバーフローは見つかりにくいんじゃな いですか。それより、"foobar" が "foo" につめられて動作がおか しいいう方が見つかりやすいんじゃないかなあ。 > ・間違いやすい人間に毎回長さを指定させるなんて. > まぁこれも結構大きい理由でしょう. それと > ・長さだけ指定してチェックしないってことはないよね? > if (strlcpy (buf, src, sizeof buf) == sizeof buf) > /* さて, どうするの? */; > 間違いやすい人間に毎度毎度チェックさせるの? という話にもなります. それは、同感です。まあ、マクロ一発という話もありますけど。 #define Strlcpy(dst, src, size) if( (strlcpy((dst),(src),(size))>=(size)) ) \ error("buffer over flow.") それで、毎回チェックするのがいやになったら、C言語をやめて Javaに移るわけです。 \\ 新城 靖 (しんじょう やすし) \\ \\ 筑波大学 電子・情報       \\