[Bug] Workaround a strange problem when extracting some SNB files with PDF contents.

This commit is contained in:
Li Fanxi 2011-03-02 23:25:53 +08:00
parent 9097d1937f
commit 60c7c66349

View File

@ -75,15 +75,18 @@ class SNBFile:
for i in range(self.plainBlock): for i in range(self.plainBlock):
bzdc = bz2.BZ2Decompressor() bzdc = bz2.BZ2Decompressor()
if (i < self.plainBlock - 1): if (i < self.plainBlock - 1):
bSize = self.blocks[self.binBlock + i + 1].Offset - self.blocks[self.binBlock + i].Offset; bSize = self.blocks[self.binBlock + i + 1].Offset - self.blocks[self.binBlock + i].Offset
else: else:
bSize = self.tailOffset - self.blocks[self.binBlock + i].Offset; bSize = self.tailOffset - self.blocks[self.binBlock + i].Offset
snbFile.seek(self.blocks[self.binBlock + i].Offset); snbFile.seek(self.blocks[self.binBlock + i].Offset)
try: try:
data = snbFile.read(bSize) data = snbFile.read(bSize)
uncompressedData += bzdc.decompress(data) if len(data) < 32768:
uncompressedData += bzdc.decompress(data)
except Exception, e: except Exception, e:
print e print e
if len(uncompressedData) != self.plainStreamSizeUncompressed:
raise Exception()
f.fileBody = uncompressedData[plainPos:plainPos+f.fileSize] f.fileBody = uncompressedData[plainPos:plainPos+f.fileSize]
plainPos += f.fileSize plainPos += f.fileSize
elif f.attr & 0x01000000 == 0x01000000: elif f.attr & 0x01000000 == 0x01000000: