mirror of
https://github.com/qpdf/qpdf.git
synced 2024-05-29 00:10:54 +00:00
Ignore objects with offset 0
This commit is contained in:
parent
041397fdab
commit
f256670eba
|
@ -1,3 +1,9 @@
|
||||||
|
2012-11-20 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
|
* Ignore (with warning) non-freed objects in the xref table whose
|
||||||
|
offset is 0. Some PDF producers (incorrectly) do this. See
|
||||||
|
https://bugs.linuxfoundation.org/show_bug.cgi?id=1081.
|
||||||
|
|
||||||
2012-09-23 Jay Berkenbilt <ejb@ql.org>
|
2012-09-23 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
* Add public methods QPDF::processInputSource and
|
* Add public methods QPDF::processInputSource and
|
||||||
|
|
31
TODO
31
TODO
|
@ -1,12 +1,31 @@
|
||||||
General
|
General
|
||||||
=======
|
=======
|
||||||
|
|
||||||
* See if I can support the encryption format used with /R 5 /V 5,
|
* See if I can support the encryption format used with /R 5 /V 5
|
||||||
even though a qpdf-announce subscriber with an adobe.com email
|
(AESV3), even though a qpdf-announce subscriber with an adobe.com
|
||||||
address mentioned that this is deprecated. There is also a new
|
email address mentioned that this is deprecated. There is also a
|
||||||
encryption format coming in a future release, which may be better
|
new encryption format coming in a future release (PDF 2.0), which
|
||||||
to support. As of the qpdf 3.0 release, the specification was not
|
may be better to support. As of the qpdf 3.0 release, the
|
||||||
publicly available yet.
|
specification was not publicly available yet.
|
||||||
|
|
||||||
|
AESV3 encryption is supported with PDF 1.7 extension level 3 and is
|
||||||
|
being deprecated, but there are plenty of files out there. The
|
||||||
|
encryption format is decribed in adobe_supplement_iso32000.pdf.
|
||||||
|
Such a file must specify that it uses these extensions in its
|
||||||
|
document catalog:
|
||||||
|
|
||||||
|
<<
|
||||||
|
/Type /Catalog
|
||||||
|
/Extensions <<
|
||||||
|
/ADBE <<
|
||||||
|
/BaseVersion /1.7
|
||||||
|
/ExtensionLevel 3
|
||||||
|
>>
|
||||||
|
>>
|
||||||
|
>>
|
||||||
|
|
||||||
|
Possible sha256 implementations: http://sol-biotech.com/code/sha2/,
|
||||||
|
http://hashlib2plus.sourceforge.net/
|
||||||
|
|
||||||
* Consider the possibility of doing something locale-aware to support
|
* Consider the possibility of doing something locale-aware to support
|
||||||
non-ASCII passwords. Update documentation if this is done.
|
non-ASCII passwords. Update documentation if this is done.
|
||||||
|
|
|
@ -1253,6 +1253,21 @@ QPDF::readObjectAtOffset(bool try_recovery,
|
||||||
int& objid, int& generation)
|
int& objid, int& generation)
|
||||||
{
|
{
|
||||||
setLastObjectDescription(description, exp_objid, exp_generation);
|
setLastObjectDescription(description, exp_objid, exp_generation);
|
||||||
|
|
||||||
|
// Special case: if offset is 0, just return null. Some PDF
|
||||||
|
// writers, in particuar "Mac OS X 10.7.5 Quartz PDFContext", may
|
||||||
|
// store deleted objects in the xref table as "0000000000 00000
|
||||||
|
// n", which is not correct, but it won't hurt anything for to
|
||||||
|
// ignore these.
|
||||||
|
if (offset == 0)
|
||||||
|
{
|
||||||
|
QTC::TC("qpdf", "QPDF bogus 0 offset", 0);
|
||||||
|
warn(QPDFExc(qpdf_e_damaged_pdf, this->file->getName(),
|
||||||
|
this->last_object_description, 0,
|
||||||
|
"object has offset 0"));
|
||||||
|
return QPDFObjectHandle::newNull();
|
||||||
|
}
|
||||||
|
|
||||||
this->file->seek(offset, SEEK_SET);
|
this->file->seek(offset, SEEK_SET);
|
||||||
|
|
||||||
QPDFTokenizer::Token tobjid = readToken(this->file);
|
QPDFTokenizer::Token tobjid = readToken(this->file);
|
||||||
|
|
|
@ -242,3 +242,4 @@ QPDF_Tokenizer EOF reading token 0
|
||||||
QPDF_Tokenizer EOF reading appendable token 0
|
QPDF_Tokenizer EOF reading appendable token 0
|
||||||
QPDFWriter extra header text no newline 0
|
QPDFWriter extra header text no newline 0
|
||||||
QPDFWriter extra header text add newline 0
|
QPDFWriter extra header text add newline 0
|
||||||
|
QPDF bogus 0 offset 0
|
||||||
|
|
|
@ -149,7 +149,7 @@ $td->runtest("remove page we don't have",
|
||||||
$td->NORMALIZE_NEWLINES);
|
$td->NORMALIZE_NEWLINES);
|
||||||
# ----------
|
# ----------
|
||||||
$td->notify("--- Miscellaneous Tests ---");
|
$td->notify("--- Miscellaneous Tests ---");
|
||||||
$n_tests += 55;
|
$n_tests += 56;
|
||||||
|
|
||||||
$td->runtest("qpdf version",
|
$td->runtest("qpdf version",
|
||||||
{$td->COMMAND => "qpdf --version"},
|
{$td->COMMAND => "qpdf --version"},
|
||||||
|
@ -410,6 +410,10 @@ $td->runtest("output to custom pipeline",
|
||||||
$td->runtest("check output",
|
$td->runtest("check output",
|
||||||
{$td->FILE => "a.pdf"},
|
{$td->FILE => "a.pdf"},
|
||||||
{$td->FILE => "custom-pipeline.pdf"});
|
{$td->FILE => "custom-pipeline.pdf"});
|
||||||
|
$td->runtest("object with zero offset",
|
||||||
|
{$td->COMMAND => "qpdf --check zero-offset.pdf"},
|
||||||
|
{$td->FILE => "zero-offset.out", $td->EXIT_STATUS => 3},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
|
||||||
show_ntests();
|
show_ntests();
|
||||||
# ----------
|
# ----------
|
||||||
|
|
5
qpdf/qtest/qpdf/zero-offset.out
Normal file
5
qpdf/qtest/qpdf/zero-offset.out
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
checking zero-offset.pdf
|
||||||
|
PDF Version: 1.3
|
||||||
|
File is not encrypted
|
||||||
|
File is not linearized
|
||||||
|
WARNING: zero-offset.pdf (object 27 0): object has offset 0
|
BIN
qpdf/qtest/qpdf/zero-offset.pdf
Normal file
BIN
qpdf/qtest/qpdf/zero-offset.pdf
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user