ここ最近、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
スポンサード リンク |
この記事のカテゴリ
- VC++ ⇒ goto fail、到達しないコードにVC++で警告を出す
GCC だと警告出ないですね。
clang なら出ます。