1

.NET Deflate Stream の使用中に次のエラーが発生した人はいますか?

System.IndexOutOfRangeException: インデックスが配列の範囲外でした。
 System.IO.Compression.HuffmanTree.CreateTable() で
 System.IO.Compression.Inflater.DecodeDynamicBlockHeader() で
 System.IO.Compression.Inflater.Decode() で
 System.IO.Compression.Inflater.Inflate (Byte[] バイト、Int32 オフセット、Int32 長さ) で
 System.IO.Compression.DeflateStream.Read (Byte[] 配列、Int32 オフセット、Int32 カウント) で

このエラーは、ディスクから読み取った deflate ストリームを解凍するときに発生します。私は、デフレートでエンコードされた小さなチャンクが多数含まれる単純なインデックス付きファイルを使用しています。数十万 (または数百万) の圧縮アイテムのうち、このエラーが発生するのは 1 つだけであるため、これは非常にまれなエラーです。

HuffmanTree.CreateTable メソッドが例外であり、ルーチンが制限を超えて配列を埋めようとしているようです。

解凍のために元のサイズの 2 倍の配列を割り当てようとしましたが、それでもエラーがスローされます。

デコードされたデータは無傷のように見えますが、ルーチンはデコードを試み続け、バッファをオーバーフローさせます。

このエラーが発生したかどうかを試行/キャッチして検出し、対処しようとすることができると思います。

問題への洞察をいただければ幸いです。

(作業している 64 ビット環境でさまざまな問題を引き起こしている DotNetZip を試しました。)

4

0 に答える 0