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

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 on 2014年02月24日 19時59分 (#2550967)

        だめ、ぜったい。
        これは、エラーチェックだけしてるんじゃなくて、
        実行してからエラーだったらgoto failしてるんだから、
        もっとまともな名前にすべき。

        do-whileのテクニックで云々している上級者の方々もそこんとこよろしく。

        親コメント
        • by Anonymous Coward

          単文でも必ずブロック化しろってのがマイジャスティス。
          そもそもifの()内で関数呼び出しして、しかも真偽判定用の式内で代入してる時点で超気持ち悪いです。

          これ、条件式が追加される仕様変更が来たときに SSLHashSHA1.update関数とかが呼ばれなくなる可能性があるから書き直しになるんですが。

最初のバージョンは常に打ち捨てられる。

処理中...