Handle invalid name tokens symmetrically for PDF < 1.2 (fixes #332)

This commit is contained in:
Jay Berkenbilt 2019-08-18 21:26:19 -04:00
parent d9dd99eca3
commit 42d396f1dd
28 changed files with 668 additions and 120 deletions

View File

@ -1,3 +1,30 @@
2019-08-19 Jay Berkenbilt <ejb@ql.org>
* Properly handle name tokens containing # not preceding two
hexadecimal digits. Such names are invalid in PDF >= 1.2 but valid
in PDF 1.0 and 1.1. Prior to this fix, qpdf's behavior was to
treat such tokens as an error for PDF >= 1.2, but for older PDF
tokens, the name was silently accepted, and when the name token
was written out, the # was changed to #23, which is the correct
way to represent a # character. This behavior was problematic for
several reasons: one is that, ordinarily, content streams are not
parsed, so this would cause things like image references whose
names contained # to break. Also, even if the input file was 1.0
or 1.1, there's no guarantee that the output file wouldn't be
written at a new version, resulting in invalid name tokens. The
new behavior is to issue a warning upon encountering such a token
but to accept it, regardless of the PDF version. Such tokens are
written out properly as well. Additionally, the warning message
indicates that the tokens are invalid for PDF >= 1.2. Fixes #332.
* Non-compatible API change: remove
QPDFTokenizer::allowPoundAnywhereInName(). There were a lot of
problems with this. When it was used, any name tokens read would
always be modified on output, which is never the correct behavior.
This method used to signal QPDFTokenizer to not treat # specially
in name tokens, which resulted in the incorrect behavior whose fix
is described in the preceding item.
2019-08-18 Jay Berkenbilt <ejb@ql.org>
* When traversing the pages tree, if an invalid /Type key is

View File

@ -1039,7 +1039,8 @@ class QPDFObjectHandle
static void parseContentStream_data(
PointerHolder<Buffer>,
std::string const& description,
ParserCallbacks* callbacks);
ParserCallbacks* callbacks,
QPDF* context);
std::vector<QPDFObjectHandle> arrayOrStreamToStreamArray(
std::string const& description, std::string& all_description);
static void warn(QPDF*, QPDFExc const&);

View File

@ -106,14 +106,6 @@ class QPDFTokenizer
QPDF_DLL
QPDFTokenizer();
// PDF files with version < 1.2 allowed the pound character
// anywhere in a name. Starting with version 1.2, the pound
// character was allowed only when followed by two hexadecimal
// digits. This method should be called when parsing a PDF file
// whose version is older than 1.2.
QPDF_DLL
void allowPoundAnywhereInName();
// If called, treat EOF as a separate token type instead of an
// error. This was introduced in QPDF 4.1 to facilitate
// tokenizing content streams.
@ -221,7 +213,6 @@ class QPDFTokenizer
// Lexer state
state_e state;
bool pound_special_in_name;
bool allow_eof;
bool include_ignorable;

View File

@ -374,10 +374,6 @@ QPDF::parse(char const* password)
// version 1.2 for /FlateDecode
this->m->pdf_version = "1.2";
}
if (atof(this->m->pdf_version.c_str()) < 1.2)
{
this->m->tokenizer.allowPoundAnywhereInName();
}
// PDF spec says %%EOF must be found within the last 1024 bytes of
// the file. We add an extra 30 characters to leave room for the

View File

@ -1616,7 +1616,8 @@ QPDFObjectHandle::parseContentStream_internal(
PointerHolder<Buffer> stream_data = buf.getBuffer();
try
{
parseContentStream_data(stream_data, all_description, callbacks);
parseContentStream_data(stream_data, all_description,
callbacks, getOwningQPDF());
}
catch (TerminateParsing&)
{
@ -1629,7 +1630,8 @@ void
QPDFObjectHandle::parseContentStream_data(
PointerHolder<Buffer> stream_data,
std::string const& description,
ParserCallbacks* callbacks)
ParserCallbacks* callbacks,
QPDF* context)
{
size_t length = stream_data->getSize();
PointerHolder<InputSource> input =
@ -1640,7 +1642,8 @@ QPDFObjectHandle::parseContentStream_data(
while (QIntC::to_size(input->tell()) < length)
{
QPDFObjectHandle obj =
parseInternal(input, "content", tokenizer, empty, 0, 0, true);
parseInternal(input, "content", tokenizer,
empty, 0, context, true);
if (! obj.isInitialized())
{
// EOF
@ -1660,9 +1663,10 @@ QPDFObjectHandle::parseContentStream_data(
if (t.getType() == QPDFTokenizer::tt_bad)
{
QTC::TC("qpdf", "QPDFObjectHandle EOF in inline image");
throw QPDFExc(qpdf_e_damaged_pdf, input->getName(),
"stream data", input->tell(),
"EOF found while reading inline image");
warn(context,
QPDFExc(qpdf_e_damaged_pdf, input->getName(),
"stream data", input->tell(),
"EOF found while reading inline image"));
}
else
{
@ -1737,6 +1741,16 @@ QPDFObjectHandle::parseInternal(PointerHolder<InputSource> input,
QPDFTokenizer::Token token =
tokenizer.readToken(input, object_description, true);
std::string const& token_error_message = token.getErrorMessage();
if (! token_error_message.empty())
{
// Tokens other than tt_bad can still generate warnings.
warn(context,
QPDFExc(qpdf_e_damaged_pdf, input->getName(),
object_description,
input->getLastOffset(),
token_error_message));
}
switch (token.getType())
{
@ -1756,11 +1770,6 @@ QPDFObjectHandle::parseInternal(PointerHolder<InputSource> input,
case QPDFTokenizer::tt_bad:
QTC::TC("qpdf", "QPDFObjectHandle bad token in parse");
warn(context,
QPDFExc(qpdf_e_damaged_pdf, input->getName(),
object_description,
input->getLastOffset(),
token.getErrorMessage()));
bad = true;
object = newNull();
break;

View File

@ -78,7 +78,6 @@ QPDFWordTokenFinder::check()
}
QPDFTokenizer::Members::Members() :
pound_special_in_name(true),
allow_eof(false),
include_ignorable(false)
{
@ -128,13 +127,6 @@ QPDFTokenizer::QPDFTokenizer() :
{
}
void
QPDFTokenizer::allowPoundAnywhereInName()
{
QTC::TC("qpdf", "QPDFTokenizer allow pound anywhere in name");
this->m->pound_special_in_name = false;
}
void
QPDFTokenizer::allowEOF()
{
@ -169,17 +161,19 @@ QPDFTokenizer::resolveLiteral()
// valid name, so don't strip leading /. That way we
// don't have to deal with the empty string as a name.
std::string nval = "/";
char const* valstr = this->m->val.c_str() + 1;
for (char const* p = valstr; *p; ++p)
size_t len = this->m->val.length();
for (size_t i = 1; i < len; ++i)
{
if ((*p == '#') && this->m->pound_special_in_name)
char ch = this->m->val.at(i);
if (ch == '#')
{
if (p[1] && p[2] &&
QUtil::is_hex_digit(p[1]) && QUtil::is_hex_digit(p[2]))
if ((i + 2 < len) &&
QUtil::is_hex_digit(this->m->val.at(i+1)) &&
QUtil::is_hex_digit(this->m->val.at(i+2)))
{
char num[3];
num[0] = p[1];
num[1] = p[2];
num[0] = this->m->val.at(i+1);
num[1] = this->m->val.at(i+2);
num[2] = '\0';
char ch = static_cast<char>(strtol(num, 0, 16));
if (ch == '\0')
@ -192,21 +186,22 @@ QPDFTokenizer::resolveLiteral()
}
else
{
nval += ch;
nval.append(1, ch);
}
p += 2;
i += 2;
}
else
{
QTC::TC("qpdf", "QPDFTokenizer bad name");
this->m->type = tt_bad;
this->m->error_message = "invalid name token";
nval += *p;
// Use null to encode a bad # -- this is reversed
// in QPDF_Name::normalizeName.
nval += '\0';
}
}
else
{
nval += *p;
nval.append(1, ch);
}
}
this->m->val = nval;

View File

@ -22,11 +22,17 @@ QPDF_Name::normalizeName(std::string const& name)
}
std::string result;
result += name.at(0);
for (unsigned int i = 1; i < name.length(); ++i)
for (size_t i = 1; i < name.length(); ++i)
{
char ch = name.at(i);
// Don't use locale/ctype here; follow PDF spec guidelines.
if (strchr("#()<>[]{}/%", ch) || (ch < 33) || (ch > 126))
if (ch == '\0')
{
// QPDFTokenizer embeds a null character to encode an
// invalid #.
result += "#";
}
else if (strchr("#()<>[]{}/%", ch) || (ch < 33) || (ch > 126))
{
result += "#" + QUtil::hex_encode(std::string(&ch, 1));
}

View File

@ -4324,6 +4324,15 @@ print "\n";
<classname>QPDFOutlineObjectHelper</classname> objects.
</para>
</listitem>
<listitem>
<para>
Remove method
<function>QPDFTokenizer::allowPoundAnywhereInName</function>.
This function would allow creation of name tokens whose
value would change when unparsed, which is never the correct
behavior.
</para>
</listitem>
<listitem>
<para>
When <command>qpdf --check</command> or <command>qpdf
@ -4508,6 +4517,17 @@ print "\n";
are now presented as warnings.
</para>
</listitem>
<listitem>
<para>
Name tokens containing the <literal>#</literal> character
not preceded by two hexadecimal digits, which is invalid in
PDF 1.2 and above, are properly handled by the library: a
warning is generated, and the name token is properly
preserved, even if invalid, in the output. See
<filename>ChangeLog</filename> for a more complete
description of this change.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>

View File

@ -81,7 +81,6 @@ QPDFObjectHandle clone array 0
QPDFObjectHandle clone dictionary 0
QPDFObjectHandle makeDirect loop 0
QPDFObjectHandle ERR clone stream 0
QPDFTokenizer allow pound anywhere in name 0
QPDF default for xref stream field 0 0
QPDF prev key in xref stream dictionary 0
QPDF prev key in trailer dictionary 0

View File

@ -1235,7 +1235,7 @@ $td->runtest("check file with leading junk",
$td->runtest("EOF inside inline image",
{$td->COMMAND => "test_driver 37 eof-in-inline-image.pdf"},
{$td->FILE => "eof-in-inline-image.out",
$td->EXIT_STATUS => 2},
$td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("tokenize content streams",
{$td->COMMAND => "test_driver 37 tokenize-content-streams.pdf"},
@ -1250,7 +1250,7 @@ $td->runtest("terminate parsing",
$td->runtest("content stream errors",
{$td->COMMAND => "qpdf --check content-stream-errors.pdf"},
{$td->FILE => "content-stream-errors.out",
$td->EXIT_STATUS => 2},
$td->EXIT_STATUS => 3},
$td->NORMALIZE_NEWLINES);
$td->runtest("ensure arguments to R are direct",
@ -2454,7 +2454,6 @@ my @goodfiles = ("implicit null", # 1
"hybrid xref old mode", # 18
"xref with prev", # 19
"lots of compressible objects", # 20
"pound in name", # 21
);
$n_tests += (3 * @goodfiles) + 6;
@ -2493,6 +2492,43 @@ check_pdf("no recompression",
"good17-not-recompressed.pdf",
0);
show_ntests();
# ----------
$td->notify("--- Name Normalization Tests ---");
$n_tests += 6;
$td->runtest("check pound in name",
{$td->COMMAND =>
"test_driver 1 pound-in-name.pdf"},
{$td->FILE => "pound-in-name.out",
$td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("convert pound in name",
{$td->COMMAND => "qpdf --static-id --qdf" .
" pound-in-name.pdf a.pdf"},
{$td->FILE => "pound-in-name-qdf.out",
$td->EXIT_STATUS => 3},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "pound-in-name.qdf"});
$td->runtest("check pound in image names",
{$td->COMMAND =>
"qpdf --check name-pound-images.pdf"},
{$td->FILE => "name-pound-images.out",
$td->EXIT_STATUS => 3},
$td->NORMALIZE_NEWLINES);
$td->runtest("convert pound in image names",
{$td->COMMAND => "qpdf --static-id --qdf" .
" name-pound-images.pdf a.pdf"},
{$td->FILE => "name-pound-images-qdf.out",
$td->EXIT_STATUS => 3},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "name-pound-images.qdf"});
show_ntests();
# ----------
$td->notify("--- C API Tests ---");

View File

@ -1,6 +1,4 @@
WARNING: bad21.pdf (trailer, offset 742): invalid name token
WARNING: bad21.pdf (trailer, offset 715): expected dictionary key but found non-name object; inserting key /QPDFFake1
WARNING: bad21.pdf (trailer, offset 715): expected dictionary key but found non-name object; inserting key /QPDFFake2
/QTest is implicit
/QTest is direct and has type null (2)
/QTest is null

View File

@ -1,6 +1,4 @@
WARNING: bad21.pdf (trailer, offset 742): invalid name token
WARNING: bad21.pdf (trailer, offset 715): expected dictionary key but found non-name object; inserting key /QPDFFake1
WARNING: bad21.pdf (trailer, offset 715): expected dictionary key but found non-name object; inserting key /QPDFFake2
/QTest is implicit
/QTest is direct and has type null (2)
/QTest is null

View File

@ -2,6 +2,6 @@ checking content-stream-errors.pdf
PDF Version: 1.3
File is not encrypted
File is not linearized
page 1: page object 3 0 stream 7 0 (content, offset 52): parse error while reading object
page 3: page object 5 0 stream 15 0 (stream data, offset 117): EOF found while reading inline image
page 4: page object 6 0 stream 19 0 (content, offset 53): parse error while reading object
WARNING: page object 3 0 stream 7 0 (content, offset 52): parse error while reading object
WARNING: page object 5 0 stream 15 0 (stream data, offset 117): EOF found while reading inline image
WARNING: page object 6 0 stream 19 0 (content, offset 53): parse error while reading object

View File

@ -22,4 +22,6 @@ name: /Fl
name: /DP
dictionary: << /Columns 1 /Predictor 15 >>
operator: ID
page object 3 0 stream 4 0 (stream data, offset 139): EOF found while reading inline image
WARNING: page object 3 0 stream 4 0 (stream data, offset 139): EOF found while reading inline image
-EOF-
test 37 done

View File

@ -1,5 +0,0 @@
/QTest is direct and has type name (7)
/QTest is a name with value /#
unparse: /#23
unparseResolved: /#23
test 1 done

View File

@ -15,49 +15,70 @@ WARNING: issue-335a.pdf (trailer, offset 62): unexpected )
WARNING: issue-335a.pdf (trailer, offset 63): unexpected )
WARNING: issue-335a.pdf (trailer, offset 64): invalid name token
WARNING: issue-335a.pdf (trailer, offset 67): unexpected )
WARNING: issue-335a.pdf (trailer, offset 67): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 68): unexpected )
WARNING: issue-335a.pdf (trailer, offset 68): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 59): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 60): unexpected )
WARNING: issue-335a.pdf (trailer, offset 61): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 62): unexpected )
WARNING: issue-335a.pdf (trailer, offset 63): unexpected )
WARNING: issue-335a.pdf (trailer, offset 64): invalid name token
WARNING: issue-335a.pdf (trailer, offset 64): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 67): unexpected )
WARNING: issue-335a.pdf (trailer, offset 67): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 96): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 113): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 114): unexpected )
WARNING: issue-335a.pdf (trailer, offset 115): unexpected )
WARNING: issue-335a.pdf (trailer, offset 116): invalid name token
WARNING: issue-335a.pdf (trailer, offset 119): unexpected )
WARNING: issue-335a.pdf (trailer, offset 119): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 120): unexpected )
WARNING: issue-335a.pdf (trailer, offset 120): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 111): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 112): unexpected )
WARNING: issue-335a.pdf (trailer, offset 113): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 114): unexpected )
WARNING: issue-335a.pdf (trailer, offset 115): unexpected )
WARNING: issue-335a.pdf (trailer, offset 116): invalid name token
WARNING: issue-335a.pdf (trailer, offset 116): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 119): unexpected )
WARNING: issue-335a.pdf (trailer, offset 119): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 134): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 150): unexpected )
WARNING: issue-335a.pdf (trailer, offset 280): unexpected )
WARNING: issue-335a.pdf (trailer, offset 281): invalid name token
WARNING: issue-335a.pdf (trailer, offset 284): unexpected )
WARNING: issue-335a.pdf (trailer, offset 285): unexpected )
WARNING: issue-335a.pdf (trailer, offset 285): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 563): unexpected )
WARNING: issue-335a.pdf (trailer, offset 596): unexpected )
WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 601): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): unexpected )
WARNING: issue-335a.pdf (trailer, offset 649): invalid name token
WARNING: issue-335a.pdf (trailer, offset 652): unexpected )
WARNING: issue-335a.pdf (trailer, offset 652): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 148): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 149): unexpected )
WARNING: issue-335a.pdf (trailer, offset 150): unexpected )
WARNING: issue-335a.pdf (trailer, offset 280): unexpected )
WARNING: issue-335a.pdf (trailer, offset 281): invalid name token
WARNING: issue-335a.pdf (trailer, offset 284): unexpected )
WARNING: issue-335a.pdf (trailer, offset 284): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 285): unexpected )
WARNING: issue-335a.pdf (trailer, offset 285): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 164): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 217): unexpected )
WARNING: issue-335a.pdf (trailer, offset 280): unexpected )
WARNING: issue-335a.pdf (trailer, offset 281): invalid name token
WARNING: issue-335a.pdf (trailer, offset 284): unexpected )
WARNING: issue-335a.pdf (trailer, offset 285): unexpected )
WARNING: issue-335a.pdf (trailer, offset 285): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 563): unexpected )
WARNING: issue-335a.pdf (trailer, offset 596): unexpected )
WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 601): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): unexpected )
WARNING: issue-335a.pdf (trailer, offset 649): invalid name token
WARNING: issue-335a.pdf (trailer, offset 652): unexpected )
WARNING: issue-335a.pdf (trailer, offset 652): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 178): invalid character (<) in hexstring
WARNING: issue-335a.pdf (trailer, offset 212): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 213): unexpected )
@ -72,28 +93,39 @@ WARNING: issue-335a.pdf (trailer, offset 280): unexpected )
WARNING: issue-335a.pdf (trailer, offset 281): invalid name token
WARNING: issue-335a.pdf (trailer, offset 284): unexpected )
WARNING: issue-335a.pdf (trailer, offset 285): unexpected )
WARNING: issue-335a.pdf (trailer, offset 285): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 563): unexpected )
WARNING: issue-335a.pdf (trailer, offset 596): unexpected )
WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 601): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): unexpected )
WARNING: issue-335a.pdf (trailer, offset 649): invalid name token
WARNING: issue-335a.pdf (trailer, offset 652): unexpected )
WARNING: issue-335a.pdf (trailer, offset 652): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 245): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 246): unexpected )
WARNING: issue-335a.pdf (trailer, offset 247): unexpected )
WARNING: issue-335a.pdf (trailer, offset 280): unexpected )
WARNING: issue-335a.pdf (trailer, offset 281): invalid name token
WARNING: issue-335a.pdf (trailer, offset 284): unexpected )
WARNING: issue-335a.pdf (trailer, offset 284): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 285): unexpected )
WARNING: issue-335a.pdf (trailer, offset 285): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 261): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 278): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 279): unexpected )
WARNING: issue-335a.pdf (trailer, offset 280): unexpected )
WARNING: issue-335a.pdf (trailer, offset 281): invalid name token
WARNING: issue-335a.pdf (trailer, offset 284): unexpected )
WARNING: issue-335a.pdf (trailer, offset 284): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 285): unexpected )
WARNING: issue-335a.pdf (trailer, offset 285): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 276): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 277): unexpected )
WARNING: issue-335a.pdf (trailer, offset 278): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 279): unexpected )
WARNING: issue-335a.pdf (trailer, offset 280): unexpected )
WARNING: issue-335a.pdf (trailer, offset 281): invalid name token
WARNING: issue-335a.pdf (trailer, offset 281): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 284): unexpected )
WARNING: issue-335a.pdf (trailer, offset 284): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 299): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 315): unexpected )
WARNING: issue-335a.pdf (trailer, offset 563): unexpected )
@ -102,7 +134,9 @@ WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 601): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 649): invalid name token
WARNING: issue-335a.pdf (trailer, offset 652): unexpected )
WARNING: issue-335a.pdf (trailer, offset 652): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 313): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 314): unexpected )
WARNING: issue-335a.pdf (trailer, offset 315): unexpected )
@ -112,7 +146,9 @@ WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 601): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 649): invalid name token
WARNING: issue-335a.pdf (trailer, offset 652): unexpected )
WARNING: issue-335a.pdf (trailer, offset 652): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 329): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 403): unexpected )
WARNING: issue-335a.pdf (trailer, offset 563): unexpected )
@ -121,7 +157,9 @@ WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 601): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 649): invalid name token
WARNING: issue-335a.pdf (trailer, offset 652): unexpected )
WARNING: issue-335a.pdf (trailer, offset 652): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 361): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 379): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 380): unexpected )
@ -133,7 +171,9 @@ WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 601): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 649): invalid name token
WARNING: issue-335a.pdf (trailer, offset 652): unexpected )
WARNING: issue-335a.pdf (trailer, offset 652): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 377): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 378): unexpected )
WARNING: issue-335a.pdf (trailer, offset 379): unknown token while reading object; treating as string
@ -151,21 +191,25 @@ WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 601): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 649): invalid name token
WARNING: issue-335a.pdf (trailer, offset 652): unexpected )
WARNING: issue-335a.pdf (trailer, offset 652): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 417): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 433): unexpected )
WARNING: issue-335a.pdf (trailer, offset 563): unexpected )
WARNING: issue-335a.pdf (trailer, offset 596): unexpected )
WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 600): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 601): unexpected )
WARNING: issue-335a.pdf (trailer, offset 601): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 431): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 432): unexpected )
WARNING: issue-335a.pdf (trailer, offset 433): unexpected )
WARNING: issue-335a.pdf (trailer, offset 563): unexpected )
WARNING: issue-335a.pdf (trailer, offset 596): unexpected )
WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 597): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 600): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 447): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 450): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 461): invalid character (<) in hexstring
@ -194,21 +238,24 @@ WARNING: issue-335a.pdf (trailer, offset 563): unexpected )
WARNING: issue-335a.pdf (trailer, offset 596): unexpected )
WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 600): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 601): unexpected )
WARNING: issue-335a.pdf (trailer, offset 601): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 527): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 528): unexpected )
WARNING: issue-335a.pdf (trailer, offset 529): unexpected )
WARNING: issue-335a.pdf (trailer, offset 563): unexpected )
WARNING: issue-335a.pdf (trailer, offset 596): unexpected )
WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 597): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 600): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 543): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 561): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 562): unexpected )
WARNING: issue-335a.pdf (trailer, offset 563): unexpected )
WARNING: issue-335a.pdf (trailer, offset 596): unexpected )
WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 597): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 600): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 559): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 560): unexpected )
WARNING: issue-335a.pdf (trailer, offset 561): unknown token while reading object; treating as string
@ -222,49 +269,56 @@ WARNING: issue-335a.pdf (trailer, offset 595): unexpected )
WARNING: issue-335a.pdf (trailer, offset 596): unexpected )
WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 600): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 601): unexpected )
WARNING: issue-335a.pdf (trailer, offset 601): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 592): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 593): unexpected )
WARNING: issue-335a.pdf (trailer, offset 594): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 595): unexpected )
WARNING: issue-335a.pdf (trailer, offset 596): unexpected )
WARNING: issue-335a.pdf (trailer, offset 597): invalid name token
WARNING: issue-335a.pdf (trailer, offset 597): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 600): unexpected )
WARNING: issue-335a.pdf (trailer, offset 600): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 629): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 646): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 647): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): unexpected )
WARNING: issue-335a.pdf (trailer, offset 649): invalid name token
WARNING: issue-335a.pdf (trailer, offset 652): unexpected )
WARNING: issue-335a.pdf (trailer, offset 652): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 653): unexpected )
WARNING: issue-335a.pdf (trailer, offset 653): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 644): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 645): unexpected )
WARNING: issue-335a.pdf (trailer, offset 646): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 647): unexpected )
WARNING: issue-335a.pdf (trailer, offset 648): unexpected )
WARNING: issue-335a.pdf (trailer, offset 649): invalid name token
WARNING: issue-335a.pdf (trailer, offset 649): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 652): unexpected )
WARNING: issue-335a.pdf (trailer, offset 652): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 667): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 683): unexpected )
WARNING: issue-335a.pdf (trailer, offset 821): unexpected )
WARNING: issue-335a.pdf (trailer, offset 822): invalid name token
WARNING: issue-335a.pdf (trailer, offset 825): unexpected )
WARNING: issue-335a.pdf (trailer, offset 826): unexpected )
WARNING: issue-335a.pdf (trailer, offset 826): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1019): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 681): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 682): unexpected )
WARNING: issue-335a.pdf (trailer, offset 683): unexpected )
WARNING: issue-335a.pdf (trailer, offset 821): unexpected )
WARNING: issue-335a.pdf (trailer, offset 822): invalid name token
WARNING: issue-335a.pdf (trailer, offset 825): unexpected )
WARNING: issue-335a.pdf (trailer, offset 825): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 826): unexpected )
WARNING: issue-335a.pdf (trailer, offset 826): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 697): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 758): unexpected )
WARNING: issue-335a.pdf (trailer, offset 821): unexpected )
WARNING: issue-335a.pdf (trailer, offset 822): invalid name token
WARNING: issue-335a.pdf (trailer, offset 825): unexpected )
WARNING: issue-335a.pdf (trailer, offset 826): unexpected )
WARNING: issue-335a.pdf (trailer, offset 826): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1019): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 711): invalid character (<) in hexstring
WARNING: issue-335a.pdf (trailer, offset 753): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 754): unexpected )
@ -279,56 +333,65 @@ WARNING: issue-335a.pdf (trailer, offset 821): unexpected )
WARNING: issue-335a.pdf (trailer, offset 822): invalid name token
WARNING: issue-335a.pdf (trailer, offset 825): unexpected )
WARNING: issue-335a.pdf (trailer, offset 826): unexpected )
WARNING: issue-335a.pdf (trailer, offset 826): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1019): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 786): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 787): unexpected )
WARNING: issue-335a.pdf (trailer, offset 788): unexpected )
WARNING: issue-335a.pdf (trailer, offset 821): unexpected )
WARNING: issue-335a.pdf (trailer, offset 822): invalid name token
WARNING: issue-335a.pdf (trailer, offset 825): unexpected )
WARNING: issue-335a.pdf (trailer, offset 825): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 826): unexpected )
WARNING: issue-335a.pdf (trailer, offset 826): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 802): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 819): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 820): unexpected )
WARNING: issue-335a.pdf (trailer, offset 821): unexpected )
WARNING: issue-335a.pdf (trailer, offset 822): invalid name token
WARNING: issue-335a.pdf (trailer, offset 825): unexpected )
WARNING: issue-335a.pdf (trailer, offset 825): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 826): unexpected )
WARNING: issue-335a.pdf (trailer, offset 826): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 817): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 818): unexpected )
WARNING: issue-335a.pdf (trailer, offset 819): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 820): unexpected )
WARNING: issue-335a.pdf (trailer, offset 821): unexpected )
WARNING: issue-335a.pdf (trailer, offset 822): invalid name token
WARNING: issue-335a.pdf (trailer, offset 822): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 825): unexpected )
WARNING: issue-335a.pdf (trailer, offset 825): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 840): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 856): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1163): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1164): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1167): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1167): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1168): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1168): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 854): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 855): unexpected )
WARNING: issue-335a.pdf (trailer, offset 856): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1163): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1164): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1164): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1167): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1167): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 870): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 953): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1015): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1018): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1163): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1163): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1164): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1167): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1167): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 902): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 920): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 921): unexpected )
WARNING: issue-335a.pdf (trailer, offset 922): unexpected )
WARNING: issue-335a.pdf (trailer, offset 953): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1015): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1015): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1018): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1018): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 918): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 919): unexpected )
WARNING: issue-335a.pdf (trailer, offset 920): unknown token while reading object; treating as string
@ -342,77 +405,94 @@ WARNING: issue-335a.pdf (trailer, offset 953): unknown token while reading objec
WARNING: issue-335a.pdf (trailer, offset 1015): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1018): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1163): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1163): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 950): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 951): unexpected )
WARNING: issue-335a.pdf (trailer, offset 952): unexpected )
WARNING: issue-335a.pdf (trailer, offset 953): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1015): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1018): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1018): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1019): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 980): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 981): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1014): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1015): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1018): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1163): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1163): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 995): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1012): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1013): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1014): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1015): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1018): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1018): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1019): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1019): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1010): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 1011): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1012): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1013): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1014): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1015): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1015): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1018): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1018): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1033): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1049): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1163): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1164): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1167): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1168): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1168): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1328): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1329): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1332): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1333): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1344): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1428): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1434): invalid character (#) in hexstring
WARNING: issue-335a.pdf (trailer, offset 1434): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1047): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 1048): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1049): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1163): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1164): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1167): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1167): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1168): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1168): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1159): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 1160): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1161): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1162): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1163): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1164): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1164): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1167): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1167): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1182): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1198): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1328): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1329): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1332): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1333): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1333): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1344): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1344): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1196): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 1197): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1198): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1328): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1329): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1332): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1332): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1333): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1333): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1212): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1265): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1328): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1329): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1332): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1333): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1333): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1344): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1344): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1226): invalid character (<) in hexstring
WARNING: issue-335a.pdf (trailer, offset 1244): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1262): unknown token while reading object; treating as string
@ -434,28 +514,32 @@ WARNING: issue-335a.pdf (trailer, offset 1328): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1329): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1332): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1333): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1333): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1344): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1344): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1293): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 1294): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1295): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1328): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1329): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1332): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1332): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1333): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1333): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1309): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1326): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1327): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1328): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1329): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1332): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1332): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1333): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1333): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1324): treating unexpected brace token as null
WARNING: issue-335a.pdf (trailer, offset 1325): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1326): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1327): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1328): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1329): invalid name token
WARNING: issue-335a.pdf (trailer, offset 1329): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1332): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1332): too many errors; giving up on reading object
WARNING: issue-335a.pdf (trailer, offset 1358): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 1395): unexpected )
WARNING: issue-335a.pdf (trailer, offset 1428): unexpected )

View File

@ -0,0 +1,3 @@
WARNING: name-pound-images.pdf (object 3 0, offset 471): invalid name token
WARNING: name-pound-images.pdf (object 3 0, offset 508): invalid name token
qpdf: operation succeeded with warnings; resulting file may have some problems

View File

@ -0,0 +1,8 @@
checking name-pound-images.pdf
PDF Version: 1.0
File is not encrypted
File is not linearized
WARNING: name-pound-images.pdf (object 3 0, offset 471): invalid name token
WARNING: name-pound-images.pdf (object 3 0, offset 508): invalid name token
WARNING: page object 3 0 stream 4 0 (content, offset 59): invalid name token
WARNING: page object 3 0 stream 4 0 (content, offset 131): invalid name token

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,8 @@
WARNING: pound-in-name.pdf (trailer, offset 749): invalid name token
WARNING: pound-in-name.pdf (trailer, offset 776): invalid name token
WARNING: pound-in-name.pdf (trailer, offset 786): invalid name token
WARNING: pound-in-name.pdf (trailer, offset 809): invalid name token
WARNING: pound-in-name.pdf (trailer, offset 818): invalid name token
WARNING: pound-in-name.pdf (trailer, offset 826): invalid name token
WARNING: pound-in-name.pdf (trailer, offset 844): invalid name token
qpdf: operation succeeded with warnings; resulting file may have some problems

Binary file not shown.

View File

@ -74,6 +74,13 @@ trailer <<
/Size 7
/Root 1 0 R
/QTest /#
/Other#20Tests <<
/## 1
/#20# 2
/#40 3
/a#b [ 4 /##00## /Som#ething ]
/Som#ething (else)
>>
>>
startxref

View File

@ -92,7 +92,18 @@ xref
0000000629 00000 n
0000000774 00000 n
trailer <<
/QTest /#23
/Other#20Tests <<
/## 1
/#20# 2
/@ 3
/Som#ething (else)
/a#b [
4
null
/Som#ething
]
>>
/QTest /#
/Root 1 0 R
/Size 8
/ID [<31415926535897932384626433832795><31415926535897932384626433832795>]

View File

@ -705,7 +705,7 @@ skipping to endstream
243: bad: > (unexpected >)
244: word: quack
249: space:
250: bad: /name#oops (invalid name token)
250: name: /name\x00oops (raw: /name#oops) (invalid name token)
260: space:
261: name: /name (raw: /n#61me)
268: space:

View File

@ -349,7 +349,7 @@ skipping to endstream
242: bad: ) (unexpected ))
243: bad: > (unexpected >)
244: word: quack
250: bad: /name#oops (invalid name token)
250: name: /name\x00oops (raw: /name#oops) (invalid name token)
261: name: /name (raw: /n#61me)
269: word: one
273: bool: true

View File

@ -705,7 +705,7 @@ skipping to endstream
243: bad: > (unexpected >)
244: word: quack
249: space:
250: bad: /name#oops (invalid name token)
250: name: /name\x00oops (raw: /name#oops) (invalid name token)
260: space:
261: name: /name (raw: /n#61me)
268: space:

View File

@ -171,7 +171,7 @@ dump_tokens(PointerHolder<InputSource> is, std::string const& label,
std::cout << " (raw: " << sanitize(token.getRawValue()) << ")";
}
}
if (token.getType() == QPDFTokenizer::tt_bad)
if (! token.getErrorMessage().empty())
{
std::cout << " (" << token.getErrorMessage() << ")";
}