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

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 on 2014年02月24日 20時35分 (#2550993)

      if文を1行にまとめるよりも1個にまとめた方がいいんじゃないの?

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

      親コメント
      • by Anonymous Coward

        それエラー(0以外)の時しかfinalまで呼ばれない上にerrに0か1しか入らないじゃん

        • by Anonymous Coward

          途中でエラー(0以外)が出たらfinalが呼ばれないんだけど。それは間違ってない。ただ、Cの仕様では論理演算子は1か0しか返さないようだから、その点に関してはあなたの指摘の通り。

          でも、gccとかだと、コンパイラが警告を出すこともなく、動作も正常だったと思うんだけどな。LISPみたいに書けて、便利だなと思った記憶が。記憶違いかな。

日々是ハック也 -- あるハードコアバイナリアン

処理中...