ここ最近、Appleの例のバグで大盛り上がりですね(Apple史上最悪のセキュリティバグか、iOSとOS XのSSL接続に危険すぎる脆弱性が発覚──原因はタイプミス? | アプリオ)。

さて問題になったようなコード、Visual C++でも警告は出るよね、という確認です。

int ReadyHash(void*, void*);
int SSLHashSHA1_update(void*, void*);
int SSLHashSHA1_final(void*, void*);
int sslRawVerify();
 
void f()
{
  int SSLHashSHA1;
  int hashCtx;
  int clientRandom, serverRandom, signedParams;
  int hashOut;
 
  int err;
  if((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0)
    goto fail;
  if((err = SSLHashSHA1_update(&hashCtx, &clientRandom)) != 0)
    goto fail;
  if((err = SSLHashSHA1_update(&hashCtx, &serverRandom)) != 0)
    goto fail;
  if((err = SSLHashSHA1_update(&hashCtx, &signedParams)) != 0)
    goto fail;
    goto fail;
  if((err = SSLHashSHA1_final(&hashCtx, &hashOut)) != 0)
    goto fail;
 
  sslRawVerify();
 
fail:
  ;
}

それっぽい、しかし適当に省略したコードを準備しました。

PS T:\> cl /c /W4 a.cpp
t:\a.cpp(23) : warning C4702: 制御が渡らないコードです。
t:\a.cpp(26) : warning C4702: 制御が渡らないコードです。

というわけで、/W4で出ました。なお、Visual Studioプロジェクトのデフォルトは/W3なので、そこは注意してください。

なお、GCCでは-Wunreachable-codeオプションを使えば良いそうです: AppleがiOS7.0.6で修正したSSLバグの簡単な解説 – Qiita

スポンサード リンク

この記事のカテゴリ

  • ⇒ goto fail、到達しないコードにVC++で警告を出す