Fixed: missing ObjStm due to invalid seek.

pull/1/head
Yusuke Shinyama 2013-10-10 20:10:57 +09:00
parent f85c374cae
commit 1455f134c6
1 changed files with 6 additions and 1 deletions

View File

@ -130,6 +130,9 @@ class PDFXRef(PDFBaseXRef):
## ##
class PDFXRefFallback(PDFXRef): class PDFXRefFallback(PDFXRef):
def __repr__(self):
return '<PDFXRefFallback: offsets=%r>' % (self.offsets.keys())
PDFOBJ_CUE = re.compile(r'^(\d+)\s+(\d+)\s+obj\b') PDFOBJ_CUE = re.compile(r'^(\d+)\s+(\d+)\s+obj\b')
def load(self, parser, debug=0): def load(self, parser, debug=0):
parser.seek(0) parser.seek(0)
@ -151,6 +154,7 @@ class PDFXRefFallback(PDFXRef):
genno = int(genno) genno = int(genno)
self.offsets[objid] = (None, pos, genno) self.offsets[objid] = (None, pos, genno)
# expand ObjStm. # expand ObjStm.
parser.seek(pos)
(_,obj) = parser.nextobject() (_,obj) = parser.nextobject()
if isinstance(obj, PDFStream) and obj.get('Type') is LITERAL_OBJSTM: if isinstance(obj, PDFStream) and obj.get('Type') is LITERAL_OBJSTM:
stream = stream_value(obj) stream = stream_value(obj)
@ -196,7 +200,7 @@ class PDFXRefStream(PDFBaseXRef):
if not isinstance(stream, PDFStream) or stream['Type'] is not LITERAL_XREF: if not isinstance(stream, PDFStream) or stream['Type'] is not LITERAL_XREF:
raise PDFNoValidXRef('Invalid PDF stream spec.') raise PDFNoValidXRef('Invalid PDF stream spec.')
size = stream['Size'] size = stream['Size']
index_array = stream.get('Index', (0,size)) index_array = stream.get('Index', (1,size))
if len(index_array) % 2 != 0: if len(index_array) % 2 != 0:
raise PDFSyntaxError('Invalid index number') raise PDFSyntaxError('Invalid index number')
self.ranges.extend(choplist(2, index_array)) self.ranges.extend(choplist(2, index_array))
@ -424,6 +428,7 @@ class PDFDocument(object):
# can raise PDFObjectNotFound # can raise PDFObjectNotFound
def getobj(self, objid): def getobj(self, objid):
assert objid != 0
if not self.xrefs: if not self.xrefs:
raise PDFException('PDFDocument is not initialized') raise PDFException('PDFDocument is not initialized')
if 2 <= self.debug: if 2 <= self.debug: