PDF格式分析(十三)如何处理PDF文件破损问题

PDF文件破损,通常是一些非法操作造成的。PDF文件中有部分内容缺失,如xref,重要的object对象。

1、xref破损

确实解决这个问题,并不复杂,只需要从文件头开始读取对象,记录下对象号和对象起始偏移位置,重新建立xref(交叉引用表),将无效的简介引用置空值,就可以了,如果同一个间接对象出现多次,取最晚出现的那个为准。如果PDF文件是加密的,要先将加密对象进行解析,然后计算出密钥,用于其他对象的解密。

2、间接对象破损

间接对象通常是对象没有正常的结束符号,reader在进行该对象解析时,发生错误。
这种情况,如果没有损害到xref,问题也好解决,根据xref可以计算出每个间接对象其实偏移位置,在读取间接对象感觉异常的时候,判断一下当前位置是否超出了该对象在PDF文件中保存的区域,如果超出对应区域,将该对象设置为无效对象,且所有引用到该对象的间接引用对象修改为null。

3、xref和间接对象都破损

这种情况相对复杂,核心方法,还是要重建xref,在读取到异常对象时,要及时的判断对象是否异常终止,比如:读取到一个破损的文件,发现对象长度异常的长,且连续出现多个“obj”和“endobject”,那就可以判断该对象错误了,并将该对象设置为无效,然后重新定位新的间接对象的开始位置,继续往后解析。

你可能感兴趣的:(PDF分析)