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

iOS7.0.6で修正された「最悪のセキュリティバグ」はありがちなコーディングミスで発生していた」記事へのコメント

  • 警告を無視しちゃいかんという教訓を得たと。

    こんな感じに、if分を一行にまとめてしまえば、こんな不具合出なかった気がします。

    if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail;
    if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail;
    if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail;

    一行が長くなるのを嫌ったのかな?

    • by Anonymous Coward

      #define ErrorCheck(f) do { if ((err = f) != 0) goto fail; } while (0)

      ErrorCheck(SSLHashSHA1.update(&hashCtx, &serverRandom));
      ErrorCheck(SSLHashSHA1.update(&hashCtx, &signedParams));
      ErrorCheck(SSLHashSHA1.final(&hashCtx, &hashOut));

      ってやりたくなるんだけど、ダメ?

      • by Anonymous Coward

        いまだにdoとwhile(0)を使う理由がわからない。
        {~}だけでよいのでは。

        • by Anonymous Coward
          do while(0)は複文を単文にするためのテクニック。
          括弧だけだとif文に後続する複文になってしまうから、do while(0)で囲んで単文にすることで、括弧なしのif文で使ったとき正しく展開されるようになる。
          ただしif文そのものは単文だから、今回のif ((err = f) != 0) goto failはdo while(0)で囲む必要は全くない。
          #define ErrorCheck(f) if ((err = f) != 0) goto fail
          でおk
          # 末尾に;つけないでおくのがポイント
          • by Anonymous Coward on 2014年02月24日 21時45分 (#2551065)

            こういう生半可を産んでしまうので、やはりマクロは鬼門ですな。
            constやインライン関数など、マクロを使わずにすむ仕掛けを使いたいところだけど、今回のようなものはそれらじゃ書けない。
            マクロが悪いのか、gotoが悪いのか...

            親コメント

ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家

処理中...