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

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日 18時47分 (#2550897)

      一行にまとめるコーディングは嫌いですし、職業プログラマーはあまり使うべきではないとも思っています。
      なので対処はif分の処理が1行でも必ず括弧で括る事です。

      親コメント
      • by Anonymous Coward on 2014年02月24日 19時05分 (#2550908)

        そうですね。
        どっちにしろ2行以上あれば必ず括弧が必要な訳だし、if文書いたら脊髄反射で{}を書いてしまうくらいでちょうどいいです。

        親コメント
        • by Anonymous Coward

          心掛ける以前に、オートインデントのために{}は必須でしょう
          自分でTabキーを押すなんて面倒臭すぎて死んじゃう

          • by Anonymous Coward

            括弧がないくらいでオートインデントできないエディタは
            使うべきじゃないんじゃないかな

      • by Anonymous Coward on 2014年02月24日 19時10分 (#2550913)

        スタイルの問題ではないでしょこれは。
        こういう重要な箇所くらいテストで100%のカバレッジを確保しろよと。
        どーでもいいとこに心血注ぐ必要はないけどさ。

        親コメント
        • by Anonymous Coward

          gotoとか使うとか{}を書かないとかするなら、全パターン網羅しろって感じではあります。

        • by Anonymous Coward

          だよね、カバレッジ取れば実行されないことが一発で分かる。
          どこまでのテストをしているのか分からないけど、品質管理は相当お粗末なのだろうな。

        • by Anonymous Coward

          いいえ、コーディングスタイルとテストの両方が必要です。

        • by Anonymous Coward

          テストもコードであるかぎり必ず漏れが発生するよ。
          常に完璧なテストコードを書けるようならそもそも最初のバグ自体入らん。

      • by Anonymous Coward

        この手のミスを防ぐ為にコーディング規約で縛っておくのが良いと思っています。

      • by Anonymous Coward

        goto fail;くらいなら1行にした方が1行抹消でif文と処理が両方消せていいんじゃないかな。
        }{の置き方次第でif文1行抹消で前後がうまく繋がっちゃう可能性もあるし。

      • by Anonymous Coward

        四角四面なルールに沿って行動することで、
        プログラマは脳みそがルーチンワークに最適化されて、
        脳みそを使わず脊髄で仕事をするようになる。

        それが最悪の結果をもたらす。

        • by Anonymous Coward

          コーダーがルーチンワークに最適化されずにどうする?
          勘違いしてないか。

          • by Anonymous Coward

            してない。
            だから駄目ソフトができあがる。

          • by Anonymous Coward

            コーダーなんて役割を分業している開発体制に問題がある。

      • if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) {
                ;
        } else if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) {
                ;
                ;
        } else if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) {
                ;
        } else {
                ...
        }
        これなら、ミスってもバグにはならなかった。

        if (!( (err = SSLHashSHA1.update(&hashCtx, &serverRandom)) ||
           

        • by Anonymous Coward

          それ、else ifのところはみんなが「絶対やるな」とドヤ顔で言ってる中括弧のないelse節だって気づいてる?
          # 文法的に中括弧を強制するならelseifキーワードの導入も事実上必須ってこと。

人生の大半の問題はスルー力で解決する -- スルー力研究専門家

処理中...