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

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

  • Cで組まなくなって長いけどgotoを使ったコードは久しぶりに見た
    OSのコードだからオーバヘッドを減らすためかもしれないけど
    違和感ありまくり

    コメント読んでもヘンテコマクロの話ばかりで皆さん違和感ないのかな
    いつもこんな感じのコードを書いてるんでしょうかね

    • 「構造化プログラミングではgoto禁止」の原理主義にはまり込む流れ

      step1 とりあえずgoto禁止

          if (実行結果==err) {
              後始末;
              return err;
          }
          if (実行結果==err) {
              後始末;
              return err;
          }
          後始末;
          return success;
      }

      step2 後始末は一箇所にまとめたい

          result = subfunc(&変数1,&変数2,…);
          変数1, 変数2,…に対して後始末;

      • こんな感じですかね。
        #switch (0) { default: xxxx } って構文初めて見た

        #define TRY(x) do { int thrown = 0; switch (0) { default:
        #define END_TRY }
        #define THROW(x) do { thrown = (x); break; }
        #define CATCH(x) if (thrown == (x)) {
        #define END_CATCH continue; }
        #define FINALLY  } while (0);
        #define END_FINALLY
         
        #define ERROR 1
         
        static OSStatus
        SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams,
                                         uint8_t *signature, UInt16 signatureLen)
        {
            OSStatus        status;
            ...
            TRY
                if (status = SSLHashSHA1.update(&hashCtx, &serverRandom), status) THROW(ERROR);
                if (status = SSLHashSHA1.update(&hashCtx, &serverRandom), status) THROW(ERROR);
                if (status = SSLHashSHA1.update(&hashCtx, &signedParams), status) THROW(ERROR);
                if (status = SSLHashSHA1.final(&hashCtx, &hashOut), status) THROW(ERROR);
            END_TRY
            CATCH(ERROR)
                ...
            END_CATCH
            FINALLY
                SSLFreeBuffer(&signedHashes);
                SSLFreeBuffer(&hashCtx);
            END_FINALLY
            return status;
        }

        親コメント

開いた括弧は必ず閉じる -- あるプログラマー

処理中...