パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

qmailにバッファオーバーフローの脆弱性」記事へのコメント

  • qmailのソースが (スコア:3, おもしろおかしい)

    by Anonymous Coward
    すごい!!という話をどこかで聞いたので
    ちらっと見てみたら確かにすごい!!

    適当に開いてみたtcpto.cの96行目当たりから

    lastwhen = (unsigned long) (unsigned char) record[11];
    lastwhen = (lastwhen lastwhen = (lastwhen lastwhen = (lastwhen when = now();

    プログラミング初心者の私がいうのも何なんですが
    • 私には無理やり1行で書こうとするソースが目に付きます。
      例えば、qsmhook.cの

      void die(e,s) int e; char *s; { substdio_putsflush(subfderr,s); _exit(e); }

      とか。なんでこんなにしてまで1行にしなきゃいけないんだろう。
      難読プログラムコンテストにでも出す気なのか?
      これ(qmail-smtpd.c)なんて

      void straynewline() { out("451 See http://pobox.com/~djb/docs/smtplf.html.\r\n"); flush(); _exit(1); }

      読みにくいのもそうだけどサイトのURLが変わったらどうすんのよ。
      それだけでバージョンアップ?

      他に気になる点は

      • イン
      --
      --------------------
      /* SHADOWFIRE */
      • 普通の関数は一行で書いたりはしてない気がしますが…(それより僕にはマクロの方が深刻でした…)

        if( x ) if ( y ) { ... }

        って if( x && y ) { ... }

        と同じじゃないんでしょうか(マクロで書くなら気をつけなきゃいけませんが)。
        スタンダードではないですがある意味深いカッコがへっていいような気もするので、少なくとも「スタンダードでないからダメ」以外の理由でそんなに理に叶って
        • by Anonymous Coward
          > if( x ) if ( y ) { ... }

          > って if( x && y ) { ... }

          > と同じじゃないんでしょうか(マクロで書くなら気をつけなきゃいけませんが)。

          上のコードではxの評価が必ずyの評価よりも先になります。下の場合はどちらの評価が先になるか分かりません。
          • by Anonymous Coward
            そんなことはないでしょう。
            if (p && p->x) { ... }
            と書けないことになるじゃないですか。
            • >if (p && p->x) { ... }
              >と書けないことになるじゃないですか。

              C言語の場合,
              結合規則(?)で「 x && y && z は, ( x && y ) && z と評価する.」とはあるけど,
              「 && は,左オペランドを先に評価する.」と決まってました?

              # if( x ) if( y ) { ... }
              # と書けば,必ず x が先に評価されてから y が評価されるので,
              # 評価の順番が明確になります.
              • by Anonymous Coward
                #477795じゃないですが
                > C言語の場合,
                >結合規則(?)で「 x && y && z は, ( x && y ) && z と評価する.」とはあるけど,
                >「 && は,左オペランドを先に評価する.」と決まってました?

                決まっている [catnet.ne.jp]らしいですね。
                まあ、私的には書き方なんてどうでもいいと思いますが。
              • by shiba (273) on 2004年01月21日 17時35分 (#478082) ホームページ
                >決まっている [catnet.ne.jp]らしいですね。

                && || ,(カンマ) と ?:(3項演算子) は,特例か...気をつけないと.
                親コメント
              • by IKEDA Kenji (4659) on 2004年01月22日 7時23分 (#478464)

                順もさることながら、不要になった時点で評価を止めてしまうというのも大事です。 たとえば if (x1 && y)x1 が偽の場合、if (x2 || y)x2 が真の場合などでは、y は評価されません。

                こういう仕様最近ではあたりまえですが、C言語以前では、最後まで必ず評価されてしまうものや評価されるされないが実装でバラバラなので「されてしまう」ことを前提にコーディングしなきゃいけないもの、なんてのがゴロゴロしていました。なので、この部分を明確にしていた Cという言語は私には画期的に思えたものです。

                親コメント

ソースを見ろ -- ある4桁UID

処理中...