アカウント名:
パスワード:
iOS7.0.6で修正された「最悪のセキュリティバグ」はありがちなコーディングミスで発生していたhttp://apple.srad.jp/story/14/02/24/094232/ [srad.jp]
goto問題じゃなくてifの使い方だろ
いや static変数の使い方 と 値を入れてないままの変数を返しているってのをチェックできていないというのが本質だろう。static変数の定義が明示的な初期化が無くても0が保証されるという仕様は、バグの元だとおもう。この仕様がため、代入前の参照が警告にもならなかったのだろうし。初期化子のない変数は-1などトラップされやすい値を入れるとか、デバッグ用コンパイルスイッチがあってもよさそう.
GCCなら、-fno-zero-initialized-in-bssで初期化されているものをbssから除き、リンカの設定でbssを消せばいいと思う。実際、私は組み込み機器向けにバイナリ形式で実行ファイルを生成するときにこのオプションを使いました。バイナリのサイズを小さくでき、bssの初期化用のコードも不要なので便利です。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
最初のバージョンは常に打ち捨てられる。
goto fail; (スコア:1, 参考になる)
iOS7.0.6で修正された「最悪のセキュリティバグ」はありがちなコーディングミスで発生していた
http://apple.srad.jp/story/14/02/24/094232/ [srad.jp]
Re: (スコア:1)
goto問題じゃなくてifの使い方だろ
Re: (スコア:2, すばらしい洞察)
いや static変数の使い方 と 値を入れてないままの変数を返しているってのをチェックできていないというのが本質だろう。
static変数の定義が明示的な初期化が無くても0が保証されるという仕様は、バグの元だとおもう。この仕様がため、代入前の参照が警告にもならなかったのだろうし。
初期化子のない変数は-1などトラップされやすい値を入れるとか、デバッグ用コンパイルスイッチがあってもよさそう.
Re:goto fail; (スコア:1)
GCCなら、-fno-zero-initialized-in-bssで初期化されているものをbssから除き、リンカの設定でbssを消せばいいと思う。
実際、私は組み込み機器向けにバイナリ形式で実行ファイルを生成するときにこのオプションを使いました。バイナリのサイズを小さくでき、bssの初期化用のコードも不要なので便利です。