2014-11-17 44 views
1

我在iTextSharp的zlib实现中发现了一个相当烦人和严重的问题。很难重现,因为它取决于实际数据要到PDF,但在某些情况下,会出现以下异常:iTextSharp的zlib压缩中的IndexOutOfRangeException

System.IndexOutOfRangeException: Index was outside the bounds of the array. 
at System.util.zlib.Tree.d_code(Int32 dist) 
at System.util.zlib.Deflate.compress_block(Int16[] ltree, Int16[] dtree) 

回答

2

System.util.zlib.Tree.cs,但显然没有范围检查,只有一个事物的假设永远不会出错。添加以下(byte)强制转换似乎是一个解决方案:

internal static int d_code(int dist){ 
    return ((dist) < 256 ? _dist_code[dist] : _dist_code[256+(byte)((dist)>>7)]); 
}