[スレッド全体]

2016/11/27 (日) 22:38:24 もか 返信 削除
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
[2385] Re3:セキュアなsnprintf関数。
>中の人向けなので詳しい内容は書きません
半分中の人です。中の人向けだからこそ書いてほしいです。

他人・自分の書いたコードの中には「許容可能」「ぎりぎり許容可能」「許容不可能」があります。
そのへんの閾値・種類は人によって異なるわけです。
例えば、new[]をdelete([]なし)で解放するとか、私は「許容不可能」に分類しています。
いっぽうで、私はauto_strlen,_tcslen,wcslen,lstrlenの混用をしょうがないので許容しています。
コーディングスタイルは、いまさら言っても始まらないので諦めています。

衝突の原因になるので、あまり言いたくはないですが
ぼぼさんに感じるのは、私とは信仰している宗教が違うみたいだ。
という点です。
宗教が違っても、お互い別の国に住んでる場合には問題ないのだけど、
同じ家に住んで、一緒の居間で過ごすとなると、双方に相応の努力が必要になってきます。

とりあえずぼぼさんは、セキュリティ対策っていうヤバめなタイトルのパッチを
・あるなら「本当にやばいと思う部分」脆弱性の修正(これは公開せずコミッタに直接送ってもいいです)
・予防措置的なセキュリティ対策
・inlineとか10マイクロ秒早くなるとかの、趣味的なもの
・初期化ミスとかのバグ類

みたいに意味のある単位に分離して、書き直した方がいいです。
でないと、でかいごちゃ混ぜの物を置いてかれても真面目に相手をしてもらえないです。

auto_snprintf_sについてはBufSize, countの2引数のそれぞれの意味と、
正しい想定した使い方を説明しないと「ただ見せびらかしてるだけ」です。
もちろんcount1引数ではダメである論理的な説明も必要です。
しかもこの前のauto_*はstrlenに関する話であってsprintfは無関係のはずです。
なお私は、10マイクロ秒、30バイト節約できるみたいな話に興味はありません。
でもコードの間違いが減る、コード変更に対する耐性が高くなる、簡素(分かりやすく)に書けるなどには興味があります。
ちなみに「え、うそ。」みたいには別に思いません。そう言う宗教もあるな、と思うだけです。

バッファ長を2引数にしたところで
TCHAR szRealBuf[100];
TCHAR* szBuf = szRealBuf;
auto_snprintf_s(szBuf, sizeof(szBuf), sizeof(szBuf), _T("%d"), linenum);
みたいに他人に書かれるのを防ぐ手立てがないんですよね。
しかも、後で変数宣言の方が書き変わったというパターンが多いので、見逃す可能性を否定できません。
結局最後は使う人だもの。正しい使い方を説明できなきゃだめだわ。
もちろん自分で説明する必要はないです、必要十分なURLを提示してくれれば。
追記:この例はよくないね。_countofを普通使うからエラーになる。(追記ここまで)

この二つは何がどう違うのか説明可能ですか。
void my_functuin1(wchar* out, size_t size){
    auto_snprintf_s(out, size, size, L"%d", g_linenum);
}
void my_functuin2(wchar* out, size_t size){
    auto_snprintf(out, size, L"%d", g_linenum);
}

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.000]