0

TStream は抽象クラスです。

しかし、その実装については、バッファオーバーフローの証拠ですか?

私以外のソースからインターネットからストリームをフェッチしている場合、ストリームが破損していないことを確認するにはどうすればよいですか?

ストリームが xml ファイルであるとしましょう。

編集:すべての回答は、バッファオーバーフローを確認する必要があることを示しています. 入力ファイルのバッファ オーバーフローをチェックする方法を示してもらえますか?ここで、ストリームがその定義により無限になる可能性があることがわかっています。

4

4 に答える 4

5

TStreamそして、そのさまざまな RTL の子孫には、私の知る限り、バッファ オーバーランを引き起こすバグはありません。

ただし、Delphi ストリームを使用するコードは、バッファを簡単にオーバーランする可能性があります。

于 2011-09-15T15:07:12.453 に答える
5

TStream呼び出し元が提供するバッファに読み込みます。提供されたバッファーとそのサイズが有効であることを確認するのは、呼び出し元の責任です。

于 2011-09-15T22:13:00.577 に答える
1

通常、提示されたストリームのプロパティに依存して、Sizeバッファを埋める前に独自のバッファのサイズを設定する必要があります。そのSizeプロパティが実際のサイズを提供しない唯一の理由は、どちらかのSeekメソッドの実装が間違っていることです。その方法が奇妙な境界の仮定に基づいてストリームのサイズを決定しない限り、単一のテストで問題を除外する必要があります。

いずれにせよ、ストリームに破損したデータが含まれているかどうかに関係なく、自分のバッファのサイズを超えてダウンロードしない場合は、自分の側でバッファオーバーフローが発生することはありません。

提示されたストリームのタイプを要求して、それが標準のDelphiストリームであるかどうかを確認することもできます。もしそうなら、あなたは心配する必要はありません。

于 2011-09-15T16:30:17.730 に答える
1

いいえ、TStream の子孫は「オーバーフロー防止」ではありません。しかし、Remy と NGLN のアドバイスに従えば、Delphi ストリームで可能な限り安全なコードを書くことができます。

悪意のあるものを恐れている場合は、try/except および/または try/finally ブロック内で処理し、潜在的な損傷をクリーンアップします。

「try」を正しく使用することが、 SAFE Delphi プログラミングの鍵です。特効薬はありません。これは、「金属に近づく」ことを可能にするよりも、コンパイルされた言語を使用するときに支払う代償です。

于 2011-09-16T04:37:16.950 に答える