2

我今天在 Flash player 11 中发现了一个有趣的错误。它也可能在其他版本中。如果您启用了调试跟踪,我可以立即使用一行代码使 Flash 播放器浏览器崩溃,不会引发运行时错误,并且只显示一条消息:“错误:内存不足”。

构造一个大小为 -1 的向量。

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

噗,你的整个应用程序都放弃了。数组至少会引发“超出范围”的运行时错误。这怎么不抓?由于未处理,它会导致漏洞利用吗?

还有人经历过这个吗?我在版本 11.4.31.110 和 11.2.202.235 中对其进行了测试

4

2 回答 2

4

可能是因为构造函数需要一个无符号整数(只有正数)。

将 -1 转换为无符号整数会产生 4,294,967,295,这将使内存不足错误更有意义。提交错误报告可能有意义。否则,不要那样做:)

于 2012-10-15T21:27:05.907 回答
1

如何分配负内存?

Vector.<T>() 构造函数需要一个 unsigned int 和 boolean 作为参数:

public function Vector(length:uint = 0, fixed:Boolean = false)
  • length:uint (default = 0) — Vector 的初始长度(元素数)。如果此参数大于零,则创建指定数量的 Vector 元素并使用适合基本类型的默认值填充(引用类型为 null)。
  • fixed:Boolean (default = false) — Vector 的长度是固定的 (true) 还是可以更改的 (false)。也可以使用固定属性设置此值。

同样,访问 Vector 的length属性也是uint.

从 0 中减去 1 会导致整数溢出,这很可能是您的错误。

如果您尝试通过初始化为 -1 以编程方式派生状态,则应将向量设置为null

于 2012-10-15T21:29:26.263 回答