summaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf/QPDF.cc')
-rw-r--r--libqpdf/QPDF.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index e3c3d83e..d1ebb8c2 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -487,7 +487,7 @@ QPDF::read_xref(qpdf_offset_t xref_offset)
qpdf_offset_t
QPDF::read_xrefTable(qpdf_offset_t xref_offset)
{
- PCRE xref_first_re("^\\s*(\\d+)\\s+(\\d+)");
+ PCRE xref_first_re("^\\s*(\\d+)\\s+(\\d+)\\s*");
PCRE xref_entry_re("(?s:(^\\d{10}) (\\d{5}) ([fn])[ \r\n]{2}$)");
std::vector<QPDFObjGen> deleted_items;
@@ -496,7 +496,10 @@ QPDF::read_xrefTable(qpdf_offset_t xref_offset)
bool done = false;
while (! done)
{
- std::string line = this->file->readLine(50);
+ char linebuf[51];
+ memset(linebuf, 0, sizeof(linebuf));
+ this->file->read(linebuf, sizeof(linebuf) - 1);
+ std::string line = linebuf;
PCRE::Match m1 = xref_first_re.match(line.c_str());
if (! m1)
{
@@ -505,6 +508,8 @@ QPDF::read_xrefTable(qpdf_offset_t xref_offset)
"xref table", this->file->getLastOffset(),
"xref syntax invalid");
}
+ file->seek(this->file->getLastOffset() + m1.getMatch(0).length(),
+ SEEK_SET);
int obj = atoi(m1.getMatch(1).c_str());
int num = atoi(m1.getMatch(2).c_str());
static int const xref_entry_size = 20;