yusuk****@cheru*****
yusuk****@cheru*****
2005年 4月 15日 (金) 00:16:33 JST
田畑です。 #[anthy-dev 2000]ゲットおめでとうございます。 > 静的なソースコード監査ツール > RATS - Rough Auditing Tool for Security > http://www.securesoftware.com/resources/tools.html > を用いてanthyのコードの一部をチェックしました. ありがとうございます。この手の問題は動作上の実害が 少ないとしても、ツッコミどころの多いコードは読むのに 疲れるので直しておくべきだと思っていますので、御指摘は 助かります。 > 1. dic-tool.c: read_entry() > > type_name[256] と宣言されていますが, sprintf()によって257バイト書きこまれる > 可能性があります. 修正しました。 > 2. rkhelper.c: make_rkmap_shiftascii() > > opt->toggle が関数の外で書換えられるというあまりありえない > 状況も考えたとすると, > すべての c に対して rk_default_symbol[c] と c == opt->toggle が真となった場合 > 配列 work は [5*128] だけの領域を使います. opt->toggleをローカル変数にコピーして、変化が無いことを わかりやすくしました。 > > 3. rkhelper.c: make_rkmap_hirakata() > > こちらも opt->toggle が関数の外で書換えられなければ問題ありませんが, > work = alloca(2*128 + 6); > ではなく > work = alloca(2*128 + 8); こちらはこのように修正しました。 > 他にも, dic-tool.c:find_head()などで, > 配列の長さを関数に渡しておらずチェックされていない, fgets()で256文字しか読まないということはわかるので、 とりあえず、このままにしておきます。 > dic-tool.c:print_usage()などで, > フォーマット文字列にマクロをそのままないし連結していれている, この場合は凝ったことをしていないので、安全であることは 自明だと思います。 > > などは潜在的に危険ではないかと思います. -- CHAOS AND CHANCE! Yusuke TABATA (yusuk****@cheru*****)