mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 10:58:58 +00:00
parent
7393a03868
commit
e9a319fb95
@ -1,3 +1,8 @@
|
|||||||
|
2013-12-14 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
|
* Allow anyspace rather than just newline to follow xref header.
|
||||||
|
This allows qpdf to read a wider range of damaged files.
|
||||||
|
|
||||||
2013-11-29 Jay Berkenbilt <ejb@ql.org>
|
2013-11-29 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
* If NO_GET_ENVIRONMENT is #defined, for Windows only,
|
* If NO_GET_ENVIRONMENT is #defined, for Windows only,
|
||||||
|
@ -487,7 +487,7 @@ QPDF::read_xref(qpdf_offset_t xref_offset)
|
|||||||
qpdf_offset_t
|
qpdf_offset_t
|
||||||
QPDF::read_xrefTable(qpdf_offset_t xref_offset)
|
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}$)");
|
PCRE xref_entry_re("(?s:(^\\d{10}) (\\d{5}) ([fn])[ \r\n]{2}$)");
|
||||||
|
|
||||||
std::vector<QPDFObjGen> deleted_items;
|
std::vector<QPDFObjGen> deleted_items;
|
||||||
@ -496,7 +496,10 @@ QPDF::read_xrefTable(qpdf_offset_t xref_offset)
|
|||||||
bool done = false;
|
bool done = false;
|
||||||
while (! done)
|
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());
|
PCRE::Match m1 = xref_first_re.match(line.c_str());
|
||||||
if (! m1)
|
if (! m1)
|
||||||
{
|
{
|
||||||
@ -505,6 +508,8 @@ QPDF::read_xrefTable(qpdf_offset_t xref_offset)
|
|||||||
"xref table", this->file->getLastOffset(),
|
"xref table", this->file->getLastOffset(),
|
||||||
"xref syntax invalid");
|
"xref syntax invalid");
|
||||||
}
|
}
|
||||||
|
file->seek(this->file->getLastOffset() + m1.getMatch(0).length(),
|
||||||
|
SEEK_SET);
|
||||||
int obj = atoi(m1.getMatch(1).c_str());
|
int obj = atoi(m1.getMatch(1).c_str());
|
||||||
int num = atoi(m1.getMatch(2).c_str());
|
int num = atoi(m1.getMatch(2).c_str());
|
||||||
static int const xref_entry_size = 20;
|
static int const xref_entry_size = 20;
|
||||||
|
@ -464,6 +464,7 @@ $td->runtest("object with zero offset",
|
|||||||
{$td->COMMAND => "qpdf --check zero-offset.pdf"},
|
{$td->COMMAND => "qpdf --check zero-offset.pdf"},
|
||||||
{$td->FILE => "zero-offset.out", $td->EXIT_STATUS => 3},
|
{$td->FILE => "zero-offset.out", $td->EXIT_STATUS => 3},
|
||||||
$td->NORMALIZE_NEWLINES);
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
# leading-junk also has a space instead of a newline after xref
|
||||||
$td->runtest("check file with leading junk",
|
$td->runtest("check file with leading junk",
|
||||||
{$td->COMMAND => "qpdf --check leading-junk.pdf"},
|
{$td->COMMAND => "qpdf --check leading-junk.pdf"},
|
||||||
{$td->FILE => "leading-junk.out", $td->EXIT_STATUS => 0},
|
{$td->FILE => "leading-junk.out", $td->EXIT_STATUS => 0},
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user