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

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 いるの?

        • by Anonymous Coward

          do whileがなかったら、
          if ( foo == true )
              ErrorCheck()
          else
              ErrorCheck()
          これが
          if ( foo == true )
              if(~) goto fail;
          else
              if(~) goto fail;
          になってしまう。凡ミスを防ぐための処理。
          fooがtrueでない場合にelseのほうを実行してほしいのに、マクロ展開すると、fooがfalseだとなにも実行されないという。
          まぁ、これもカッコつけろよって話なんだけど。

          • by Anonymous Coward

            doとwhile(0)が必要な理由になってないんだけど・・・

            • by Anonymous Coward

              マクロ関数を普通の関数のように最後に ; を付けて適切に展開されるようにするため。

              do while (0) なしだと

              if ()
                  ErrorCheck(...);
              else
                  ErrorCheck(...);

              if ()
                  { ... };
              else
                  { ... };

              となり、 if の終わりの {} の後の ; が空文となるので、 else の行で文法エラーとなる。

              do while (0) ありだと

              if ()
                  ErrorCheck(...);
              else
                  ErrorCheck(...);

              if ()
                  do { ... } while (0);
              else

              • by Anonymous Coward on 2014年02月24日 21時01分 (#2551021)

                do~while(0)を使う理由はわかったが、
                if、elseには必ず{~}をつける、というルールを徹底した方が良い。
                レビューの度にこういう議論をしたくない。

                親コメント
              • by Anonymous Coward

                #2550910だけど、私もそう思う。
                if文はカッコがないとコンパイルエラーにしちゃえばいいのにねぇ。

                考えてみたら、defineマクロにgoto入れられてたら、do while関係なしに投げ捨てたくなるわ。

                スマホで書き込んでるから、説明簡素化しすぎて伝えられなくてごめん。
                詳細に書いてくれた人ありがとう。

              • by Anonymous Coward

                > if文はカッコがないとコンパイルエラーにしちゃえばいいのにねぇ。
                #2553818参照

犯人は巨人ファンでA型で眼鏡をかけている -- あるハッカー

処理中...