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

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

  • by Anonymous Coward

    たとえば3つの逐次処理があって、エラーなら次に進まないとすると、gotoなしだと
    if (処理1が成功) {
     if (処理2が成功) {
      if (処理3が成功) {
      }
     }
    }
    となって逐次処理なのにネストっぽくなってしまう。
    ホントの条件分岐やループがあったら取り返しの付かない深さに。

    if (処理1が失敗) {
     goto エラー終了
    }
    if (処理2が失敗) {
     goto エラー終了
    }
    if (処理3が失敗) {
     goto エラー終了
    }

    のほうがやりたいことがストレートに書ける気がするんだ。
    実際、今回のコードもこんな感じ。

    • 本来なら例外を使うべきところを、効率が求められるOS内コードなので goto で代用した、と考えると納得がいく気がします。

      • .cみたいなのでこのコードはC++ではなくCなのではないかと思います。
        そうすると例外機能がないので。

        自分で確認はしてないですが、コメントに「同じディレクトリに.cppのファイル」があるという話なようですね。
        とすればプロジェクトは(恐らく)C++ も使える環境なんだろうと思うので
        何故このコードがCでないといけないのか不思議には思いますが…。

        C++である場合、例外の実装ではオーバーヘッドは主に投げる時に発生し、
        投げない時には極力発生しないように工夫されているという話なので
        チェックが失敗したときに少し遅くなる程度はそれほど問題にならない気もしなくはないです。
        (失敗した場合、それよりうしろのチェックの処理時間はなくなるわけだし。)

        参考: 「C++オブジェクトモデル―内部メカニズムの詳細 」 [amazon.co.jp](S.B. リップマン 著)の7.2節

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

処理中...