tstream是缓冲区溢出证明吗?

时间:2011-09-15 15:01:10

标签: delphi delphi-2009 buffer-overflow tstream

TStream是一个抽象类。

然而关于它的实现,它们是否缓冲溢出证明?

如果我从互联网上获取流,来自不是我的源,我该如何验证它是否已损坏并导致缓冲区溢出?

假设该流是一个xml文件。

编辑: 所有答案都表明你需要检查缓冲区溢出。 你能演示如何检查输入文件上的缓冲区溢出,我们知道流的定义可以是无限的吗?

4 个答案:

答案 0 :(得分:5)

TStream及其各种RTL后代没有任何导致缓冲区溢出的错误,据我所知。

但是,使用Delphi流的代码很容易超出缓冲区。

答案 1 :(得分:5)

TStream读入调用者提供的任何缓冲区。调用者有责任确保提供的缓冲区及其大小有效。

答案 2 :(得分:1)

通常,您应该依赖于所呈现的流的Size属性来设置您自己的缓冲区的大小,然后再填充它。 Size属性未提供实际大小的唯一原因是Seek方法的错误实现。除非该方法在奇怪的边界假设上确定流的大小,否则单个测试应该排除任何问题。

在任何情况下,无论流是否包含损坏的数据,如果您的下载量不超过自己的缓冲区大小,它应该会遇到缓冲区溢出。

您还可以请求显示的流的类型并验证它是否是标准的Delphi流。如果是这样,那么你不必担心。

答案 3 :(得分:1)

不,TStream后代不是'溢出证明'。但如果您遵循Remy和NGLN的建议,您将使用Delphi流编写尽可能安全的代码。

如果您害怕某些恶意内容,请在try / except和/或try / finally阻止中处理它并清除任何潜在的损害。

正确使用'try'是 SAFE Delphi编程的关键 - 没有银子弹。这是您使用编译语言时所支付的价格,而不是让您“接近金属”。