今日のなんでやねん
2002-04-09 [長年日記]
凹 まさにそういうのを昨日見ました
最初,何を意図しているのか理解できませんでした.ある意味,大変勉強になるソースコードレビューです.
凹 ビルを貫通する未来の首都高速
こんなの阪神高速ですでに実現しとるやんけ.どこだっけ? 池田線*1に入るあたりだっけ? どうせなら
行けども行けどもビルの中しか走れない首都高
とか作れよ.
*1 11号線かな?
凹 hogehogeのところ
補足しておくと,それなりに長い処理です.
凹 おぉ,わざわざどうもです.ちなみにオレは7点でした.平均よりもちょっと悪いらしい.
凹 なんでもn付けりゃえーってもんじゃない
今ソースコードレビューさせられてるところにはセキュアコーディング規約というモノがある.これはこれでなかなか良くできたモノで,Buffer Overrunを利用したリターンアドレス書換えの原理なんかも図解入りで分かり易く説明してくれている.
当然この規約の中では危険な関数として,strcpy(3),strcat(3)とかsprintf(3)とかgets(3)を挙げ,替わりにstrncpy(3),strncat(3),snprintf(3),fgets(3)を用いるように,と書かれている.
ところが,このプロジェクトのほとんどのプログラマは,肝心のBuffer Overrunの説明を読まずに代替関数の名前にしか興味がないらしく,単に
strなんちゃらにnを付けただけです.エヘ.
なトンデモプログラムを作り上げているのだ.
int hoge(char *arg1, char *arg2)
{
char buff[BUFF_SIZE];
memset(buff, 0x00, BUFF_SIZE)
strncpy(buff, arg1, strlen(arg1));
strncat(buff, arg2, strlen(arg2));
return hage(buff);
}こんなの.
もはや説明するのもウザいので
snprintf(3)使って書きなおして下さいね
って言っちゃった.
snprintf(buff,
strlen(arg1) + strlen(arg2)
"%s%s", arg1, arg2);なーんてならないことを祈る.
凹 別にね
彼らの知識不足を責めている訳ではないのよ,オレは.知識を得ようとしないその姿勢を責めてるのです.プロのプログラマならそれなりに勉強しなさいよ.
凹 今日のiiimf-skk
hotfix patch 1が出ているので,早速当ててコンパイル.
今日見つけた不具合に関してはsf.jpに勝手にバグ報告してしまった.コッソリ日記へのツッコミの分も合わせてなんとか協力したいんだけど… ソースを眺めるがいまいちまだ全体像が捕めない.気合い入れて読んでみたいが時間が無いなぁ.
凹 ということででっち上げたなんちゃってパッチ込みnosrc.rpmです.これ,hotfix1に加えて,abbrev modeのCtrl-Gと,jmodeで時々Ctrl-Hが効かなくなる現象を回避するなんちゃってパッチと,さらに,skk-egg-like-newlineを有効にして,句読点を点と丸からカンマとピリオドに変え,記号のいくつかを半角にするパッチ*1も込みです.
実はソースをほとんど読んでないので
的外れな修正している可能性超特大
です.
*1 このへんは完全にオレの好みに変えちゃってます.
凹 MAGMA internet Mega store
なんでこんなところが今日のrefererに… おそらくIEのウソrefererバグのせいだと思うが,ということは,コレはその手の人がオレのページを見ているという証拠?
やりましたよ。9点でした。これってどうなんでしょう?
いえーぃ,私は136%でした.
うげっ!snprintf()なんて知らなかったよ。今まで、誰も教えてくれなかったのか〜っ!!<br>こんなツッコミしたらやばいか!?だって、素人じゃないし…。(ーー;)
snprintf()って古い環境だとなかったりするけど、当然そこまで考えて避けてたわけじゃないんだろうなぁ。
snprintf()、私も最近まで知りませんでしたよ。<br>ただ、ここ2,3年巷を騒がせているセキュリティ問題で、<br>より安全なプログラムを作るにはどうしたら良いかという<br>ことを気にするようになってからその存在に気づきました。<br>最近ではよく使いますね。<br>あとは、scanf のフォーマット指定の仕方とかで、いまだに<br>char str[BUFF_SIZE];<br>scanf("%s", str);<br>ってやっちゃうとか…よく見ますけどねぇ…大丈夫?って<br>感じです。
いつの間にタイトル変えたんだ?<br>アンテナ書き換えとこっと。
12/16でした。わりと眼力ある方なのかしらん………
scanf()は、幅指定をフォーマット文字列に埋め込まなければいけないのが<br>いや〜んなところ。
うーむ、strcpy とか関数が危険なんじゃなくて単に使い方間違っているだけではないのか?
そりゃまもちろんそうなんですが、strncat()を並べたときにはその数だけ注意しなければいけない箇所が増えるのが、snprintf()なら一ヶ所ですむとか。<br>まぁ中にはgets()なんて箸にも棒にもかからんのもあったりするけど。