Tstream是缓冲区溢出证明



TStream是一个抽象类

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

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

假设流是一个xml文件

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

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

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

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

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

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

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

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

如果你害怕一些恶意的东西,在try/except和/或try/finally块中处理它,并清除任何潜在的损害。

正确使用'try'是SAFE Delphi编程的关键-没有灵丹妙药。

当你使用编译语言时,这是你要付出的代价。

最新更新