diff -up poppler-0.7.1/poppler-0.7.1/poppler/XRef.h.objstream poppler-0.7.1/poppler-0.7.1/poppler/XRef.h --- poppler-0.7.1/poppler-0.7.1/poppler/XRef.h.objstream 2008-01-21 21:00:59.000000000 +0100 +++ poppler-0.7.1/poppler-0.7.1/poppler/XRef.h 2008-02-18 17:18:47.000000000 +0100 @@ -19,7 +19,36 @@ class Dict; class Stream; class Parser; -class ObjectStream; + +class ObjectStream { +public: + + // Create an object stream, using object number , + // generation 0. + ObjectStream(XRef *xref, int objStrNumA); + + ~ObjectStream(); + + // Return the object number of this object stream. + int getObjStrNum() { return objStrNum; } + + // Get the th object from this stream, which should be + // object number , generation 0. + Object *getObject(int objIdx, int objNum, Object *obj); + + int *getOffsets() { return offsets; } + Guint getFirstOffset() { return firstOffset; } + +private: + + int objStrNum; // object number of the object stream + int nObjects; // number of objects in the stream + Object *objs; // the objects (length = nObjects) + int *objNums; // the object numbers (length = nObjects) + int *offsets; // the object offsets (length = nObjects) + Guint firstOffset; +}; + //------------------------------------------------------------------------ // XRef @@ -106,6 +135,7 @@ public: int getSize() { return size; } XRefEntry *getEntry(int i) { return &entries[i]; } Object *getTrailerDict() { return &trailerDict; } + ObjectStream *getObjStr() { return objStr; } // Write access void setModifiedObject(Object* o, Ref r); diff -up poppler-0.7.1/poppler-0.7.1/poppler/XRef.cc.objstream poppler-0.7.1/poppler-0.7.1/poppler/XRef.cc --- poppler-0.7.1/poppler-0.7.1/poppler/XRef.cc.objstream 2008-01-21 21:00:59.000000000 +0100 +++ poppler-0.7.1/poppler-0.7.1/poppler/XRef.cc 2008-02-18 17:18:47.000000000 +0100 @@ -50,34 +50,9 @@ // ObjectStream //------------------------------------------------------------------------ -class ObjectStream { -public: - - // Create an object stream, using object number , - // generation 0. - ObjectStream(XRef *xref, int objStrNumA); - - ~ObjectStream(); - - // Return the object number of this object stream. - int getObjStrNum() { return objStrNum; } - - // Get the th object from this stream, which should be - // object number , generation 0. - Object *getObject(int objIdx, int objNum, Object *obj); - -private: - - int objStrNum; // object number of the object stream - int nObjects; // number of objects in the stream - Object *objs; // the objects (length = nObjects) - int *objNums; // the object numbers (length = nObjects) -}; - ObjectStream::ObjectStream(XRef *xref, int objStrNumA) { Stream *str; Parser *parser; - int *offsets; Object objStr, obj1, obj2; int first, i; @@ -85,6 +60,7 @@ ObjectStream::ObjectStream(XRef *xref, i nObjects = 0; objs = NULL; objNums = NULL; + offsets = NULL; if (!xref->fetch(objStrNum, 0, &objStr)->isStream()) { goto err1; @@ -105,6 +81,7 @@ ObjectStream::ObjectStream(XRef *xref, i goto err1; } first = obj1.getInt(); + firstOffset = objStr.getStream()->getBaseStream()->getStart() + first; obj1.free(); if (first < 0) { goto err1; @@ -131,7 +108,7 @@ ObjectStream::ObjectStream(XRef *xref, i obj1.free(); obj2.free(); delete parser; - gfree(offsets); +// gfree(offsets); goto err1; } objNums[i] = obj1.getInt(); @@ -141,7 +118,7 @@ ObjectStream::ObjectStream(XRef *xref, i if (objNums[i] < 0 || offsets[i] < 0 || (i > 0 && offsets[i] < offsets[i-1])) { delete parser; - gfree(offsets); +// gfree(offsets); goto err1; } } @@ -170,7 +147,7 @@ ObjectStream::ObjectStream(XRef *xref, i delete parser; } - gfree(offsets); +// gfree(offsets); err1: objStr.free(); @@ -187,6 +164,7 @@ ObjectStream::~ObjectStream() { delete[] objs; } gfree(objNums); + gfree(offsets); } Object *ObjectStream::getObject(int objIdx, int objNum, Object *obj) {