2

今日、Flash Player 11 で見つけた興味深いバグ。他のバージョンにもあるかもしれません。デバッグ トレースが有効になっている場合は、1 行のコードで Flash Player ブラウザを即座にクラッシュさせ、実行時エラーをスローせず、「エラー: メモリ不足」という 1 つのメッセージで終了できます。

サイズが -1 のベクトルを作成します。

var vector:Vector.<int> = new Vector.<int>(-1);

そして、あなたのアプリケーション全体があきらめます。配列は、少なくとも「範囲外」で実行時エラーをスローします。これはどうして捕まらないのですか?また、未処理であるため、エクスプロイトにつながる可能性はありますか?

他の誰かがこれを経験していますか?バージョン 11.4.31.110 および 11.2.202.235 でテストしました

4

2 に答える 2

4

おそらく、コンストラクターが unsigned int (正の数のみ) を想定しているためです。

-1 を unsigned int に変換すると 4,294,967,295 になり、メモリ不足エラーがより意味のあるものになります。バグレポートを提出するのは理にかなっているかもしれません。それ以外の場合は、そうしないでください:)

于 2012-10-15T21:27:05.907 に答える
1

負のメモリはどのように割り当てることができますか?

Vector。<T>()コンストラクターは、パラメーターとしてunsignedintとbooleanを想定しています。

public function Vector(length:uint = 0, fixed:Boolean = false)
  • length:uint(デフォルト= 0)—ベクトルの初期の長さ(要素の数)。このパラメーターがゼロより大きい場合、指定された数のVector要素が作成され、基本タイプに適切なデフォルト値(参照タイプの場合はnull)が入力されます。
  • fixed:Boolean(デフォルト= false)—ベクトルの長さが固定(true)であるか、変更可能(false)であるか。この値は、fixedプロパティを使用して設定することもできます。

同様に、Vectorのlengthプロパティへのアクセスもuintです。

0から1を引くと、整数のオーバーフローが発生します。これはエラーである可能性があります。

-1に初期化してプログラムで状態を導出しようとしている場合は、null代わりにベクトルをに設定する必要があります。

于 2012-10-15T21:29:26.263 に答える