dポイントプレゼントキャンペーン実施中!

mktempを使うとこのようなWanringがでる

the use of `mktemp' is dangerous, better use `mkstemp'

mktempのどこかが危険でしょうか?

A 回答 (3件)

インターポジショニングといいます。


Cではライブラリ関数名と同じ名前の関数をユーザが定義すると、特に警告することも無くユーザ定義関数を採用する仕様になっているのですが、あるとき、ライブラリ関数名をすべて暗記していないプログラマが、知らずに「mktemp」という名前の関数を自作してしまったため、リンク時にライブラリのmktempがすべてこれに置き換えられてしまい、大騒ぎになったという故事があります。
それ以来、ライブラリ関数のmktempを実行すると、「使わない方がいいですよ」とメッセージを表示するようになったという訳です。
余談ですが、他にもgets()などを使うと、やはり故事にちなんだメッセージが出るはずです。(gets()はバッファサイズを定義しないために、それを利用したwormが作られたことがあるため、現在では推奨されていません)
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。
確かにやりそうですね。

お礼日時:2005/02/24 16:13

セキュリティ上の問題がある関数を使ったときに出る警告であることは、既に先の方が回答されています。


これはgccというよりはglicが出している警告です。

glibcのソースを見ていただければ分かることですが、mktemp関数の定義の下のところに、
link_warning (mktemp, "the use of `mktemp' is dangerous, better use `mkstemp'")
というコードが書かれています。
他にも、gets関数などにも同様の記述があります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
ソースを調べる手もありますね、勉強になりました。

お礼日時:2005/02/24 16:22

参考URLのバグのところだと思います。


-- 抜粋 --
BSD 4.3 系の実装や XXXXXX をプロセス id と1文字により置き換える方式ではせいぜい26の名前を返すことができるにすぎない。この名前は簡単に推測できることや、その名前がすでに存在しているかどうかテストして、そのファイルをオープンする間に競合がある事から、 mktemp() を使うのは毎回セキュリティリスクをおかすことになる。
----

参考URL:http://www.linux.or.jp/JM/html/LDP_man-pages/man …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2005/02/24 16:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!