race condition は F_SETLKW で lock しているのでたぶん大丈夫かなと思います。
ファイルを開くタイミングの話ではなく、 開こうとしているファイルの安全を確認してから開いているかどうか、 という意味で書いたのでした(これもrace conditionの範疇です)。
- 第三者に予測可能なファイル名をもつファイルを、
- regular fileかどうかのチェック、ファイルownerのチェックを行わず、
- fopen(fn, "w")で
開いているので、どうなんだろうな、と思ったのです。
が、skk.cを良く読んでみると、 skk-uim-personal-dic-filenameと同じディレクトリにファイルを置くので、 これはおそらく問題ありません。私の誤読でしたので訂正します。
ところで、uim-helper.cのuim_helper_get_pathnameと prime.cのprime_get_ud_pathは、"/tmp"上に作るので、 こちらは上記の問題があるのではないでしょうか。
popen の方は alphabet 以外の文字は渡らないようにしてありますがどうなんでしょう?
popen(というよりsh)のglobbing ruleを気にするくらいならば、 昔ながらのfork, exec, pipeをすべきではないでしょうか。 これだと、それぞれの段階でエラー処理を制御できるので、 問題点を洗い出しやすいコードになるのではないかと思います。
一方、popenでは満足なエラー通知はできません(OpenBSD-man:popenのBUGS参照)。
blog comments powered by Disqus