Commit 2643ed4dd9bd1a8e9bb3dcd95794273e9cf5de0c

Authored by m-holger
1 parent bee72660

Add new private method QPDF::readTrailer()

include/qpdf/QPDF.hh
@@ -1006,6 +1006,7 @@ class QPDF @@ -1006,6 +1006,7 @@ class QPDF
1006 void insertFreeXrefEntry(QPDFObjGen); 1006 void insertFreeXrefEntry(QPDFObjGen);
1007 void insertReconstructedXrefEntry(int obj, qpdf_offset_t f1, int f2); 1007 void insertReconstructedXrefEntry(int obj, qpdf_offset_t f1, int f2);
1008 void setLastObjectDescription(std::string const& description, QPDFObjGen const& og); 1008 void setLastObjectDescription(std::string const& description, QPDFObjGen const& og);
  1009 + QPDFObjectHandle readTrailer();
1009 QPDFObjectHandle readObject(std::string const& description, QPDFObjGen og); 1010 QPDFObjectHandle readObject(std::string const& description, QPDFObjGen og);
1010 QPDFObjectHandle readObjectInStream(std::shared_ptr<InputSource>, QPDFObjGen og); 1011 QPDFObjectHandle readObjectInStream(std::shared_ptr<InputSource>, QPDFObjGen og);
1011 size_t recoverStreamLength( 1012 size_t recoverStreamLength(
libqpdf/QPDF.cc
@@ -567,7 +567,7 @@ QPDF::reconstruct_xref(QPDFExc&amp; e) @@ -567,7 +567,7 @@ QPDF::reconstruct_xref(QPDFExc&amp; e)
567 insertReconstructedXrefEntry(obj, token_start, gen); 567 insertReconstructedXrefEntry(obj, token_start, gen);
568 } 568 }
569 } else if (!m->trailer.isInitialized() && t1.isWord("trailer")) { 569 } else if (!m->trailer.isInitialized() && t1.isWord("trailer")) {
570 - QPDFObjectHandle t = readObject("trailer", QPDFObjGen()); 570 + QPDFObjectHandle t = readTrailer();
571 if (!t.isDictionary()) { 571 if (!t.isDictionary()) {
572 // Oh well. It was worth a try. 572 // Oh well. It was worth a try.
573 } else { 573 } else {
@@ -855,7 +855,7 @@ QPDF::read_xrefTable(qpdf_offset_t xref_offset) @@ -855,7 +855,7 @@ QPDF::read_xrefTable(qpdf_offset_t xref_offset)
855 } 855 }
856 856
857 // Set offset to previous xref table if any 857 // Set offset to previous xref table if any
858 - QPDFObjectHandle cur_trailer = readObject("trailer", QPDFObjGen()); 858 + QPDFObjectHandle cur_trailer = readTrailer();
859 if (!cur_trailer.isDictionary()) { 859 if (!cur_trailer.isDictionary()) {
860 QTC::TC("qpdf", "QPDF missing trailer"); 860 QTC::TC("qpdf", "QPDF missing trailer");
861 throw damagedPDF("", "expected trailer dictionary"); 861 throw damagedPDF("", "expected trailer dictionary");
@@ -1268,6 +1268,25 @@ QPDF::setLastObjectDescription(std::string const&amp; description, QPDFObjGen const&amp; @@ -1268,6 +1268,25 @@ QPDF::setLastObjectDescription(std::string const&amp; description, QPDFObjGen const&amp;
1268 } 1268 }
1269 1269
1270 QPDFObjectHandle 1270 QPDFObjectHandle
  1271 +QPDF::readTrailer()
  1272 +{
  1273 + qpdf_offset_t offset = m->file->tell();
  1274 + bool empty = false;
  1275 + auto object = QPDFParser(m->file, "trailer", m->tokenizer, nullptr, this).parse(empty, false);
  1276 + if (empty) {
  1277 + // Nothing in the PDF spec appears to allow empty objects, but they have been encountered in
  1278 + // actual PDF files and Adobe Reader appears to ignore them.
  1279 + warn(damagedPDF("trailer", "empty object treated as null"));
  1280 + } else if (object.isDictionary() && readToken(m->file).isWord("stream")) {
  1281 + warn(damagedPDF("trailer", m->file->tell(), "stream keyword found in trailer"));
  1282 + }
  1283 + // Override last_offset so that it points to the beginning of the object we just read
  1284 + m->file->setLastOffset(offset);
  1285 + return object;
  1286 +}
  1287 +
  1288 +
  1289 +QPDFObjectHandle
1271 QPDF::readObject(std::string const& description, QPDFObjGen og) 1290 QPDF::readObject(std::string const& description, QPDFObjGen og)
1272 { 1291 {
1273 setLastObjectDescription(description, og); 1292 setLastObjectDescription(description, og);
qpdf/qtest/qpdf/issue-100.out
1 WARNING: issue-100.pdf: file is damaged 1 WARNING: issue-100.pdf: file is damaged
2 WARNING: issue-100.pdf (offset 736): xref not found 2 WARNING: issue-100.pdf (offset 736): xref not found
3 WARNING: issue-100.pdf: Attempting to reconstruct cross-reference table 3 WARNING: issue-100.pdf: Attempting to reconstruct cross-reference table
4 -WARNING: issue-100.pdf (object 5 0, offset 268): unknown token while reading object; treating as string  
5 -WARNING: issue-100.pdf (object 5 0, offset 286): unknown token while reading object; treating as string  
6 -WARNING: issue-100.pdf (object 5 0, offset 289): unknown token while reading object; treating as string  
7 -WARNING: issue-100.pdf (object 5 0, offset 294): unknown token while reading object; treating as string  
8 -WARNING: issue-100.pdf (object 5 0, offset 297): unknown token while reading object; treating as string  
9 -WARNING: issue-100.pdf (object 5 0, offset 304): unknown token while reading object; treating as string  
10 -WARNING: issue-100.pdf (object 5 0, offset 304): too many errors; giving up on reading object  
11 -WARNING: issue-100.pdf (object 5 0, offset 308): expected endobj  
12 -WARNING: issue-100.pdf (object 5 0, offset 418): stream dictionary lacks /Length key  
13 -WARNING: issue-100.pdf (object 5 0, offset 489): attempting to recover stream length  
14 -WARNING: issue-100.pdf (object 5 0, offset 489): recovered stream length: 12  
15 -WARNING: issue-100.pdf (trailer, offset 953): expected dictionary key but found non-name object; inserting key /QPDFFake1  
16 -WARNING: issue-100.pdf (trailer, offset 953): dictionary ended prematurely; using null as value for last key 4 +WARNING: issue-100.pdf (trailer, offset 488): stream keyword found in trailer
17 qpdf: issue-100.pdf: unable to find /Root dictionary 5 qpdf: issue-100.pdf: unable to find /Root dictionary
qpdf/qtest/qpdf/issue-101.out
1 WARNING: issue-101.pdf: file is damaged 1 WARNING: issue-101.pdf: file is damaged
2 WARNING: issue-101.pdf (offset 3526): xref not found 2 WARNING: issue-101.pdf (offset 3526): xref not found
3 WARNING: issue-101.pdf: Attempting to reconstruct cross-reference table 3 WARNING: issue-101.pdf: Attempting to reconstruct cross-reference table
4 -WARNING: issue-101.pdf (object 5 0, offset 1242): expected dictionary key but found non-name object; inserting key /QPDFFake1  
5 -WARNING: issue-101.pdf (object 5 0, offset 1242): dictionary ended prematurely; using null as value for last key  
6 -WARNING: issue-101.pdf (object 5 0, offset 1438): /Length key in stream dictionary is not an integer  
7 -WARNING: issue-101.pdf (object 5 0, offset 1509): attempting to recover stream length  
8 -WARNING: issue-101.pdf (object 5 0, offset 1509): recovered stream length: 8  
9 -WARNING: issue-101.pdf (trailer, offset 1631): /Length key in stream dictionary is not an integer  
10 -WARNING: issue-101.pdf (trailer, offset 1702): attempting to recover stream length  
11 -WARNING: issue-101.pdf (trailer, offset 1702): recovered stream length: 12  
12 -WARNING: issue-101.pdf (trailer, offset 2026): /Length key in stream dictionary is not an integer  
13 -WARNING: issue-101.pdf (trailer, offset 2097): attempting to recover stream length  
14 -WARNING: issue-101.pdf (trailer, offset 2097): recovered stream length: 257  
15 -WARNING: issue-101.pdf (trailer, offset 2613): /Length key in stream dictionary is not an integer  
16 -WARNING: issue-101.pdf (trailer, offset 2684): attempting to recover stream length  
17 -WARNING: issue-101.pdf (trailer, offset 2684): recovered stream length: 74  
18 -WARNING: issue-101.pdf (trailer, offset 2928): unknown token while reading object; treating as string  
19 -WARNING: issue-101.pdf (trailer, offset 2930): unknown token while reading object; treating as string  
20 -WARNING: issue-101.pdf (trailer, offset 2928): expected dictionary key but found non-name object; inserting key /QPDFFake1  
21 -WARNING: issue-101.pdf (trailer, offset 2928): expected dictionary key but found non-name object; inserting key /QPDFFake2  
22 -WARNING: issue-101.pdf (trailer, offset 2928): expected dictionary key but found non-name object; inserting key /QPDFFake3  
23 -WARNING: issue-101.pdf (trailer, offset 2925): /Length key in stream dictionary is not an integer  
24 -WARNING: issue-101.pdf (trailer, offset 2996): attempting to recover stream length  
25 -WARNING: issue-101.pdf (trailer, offset 2996): recovered stream length: 12  
26 -WARNING: issue-101.pdf (trailer, offset 3339): /Length key in stream dictionary is not an integer  
27 -WARNING: issue-101.pdf (trailer, offset 3410): attempting to recover stream length  
28 -WARNING: issue-101.pdf (trailer, offset 3410): recovered stream length: 12  
29 -WARNING: issue-101.pdf (trailer, offset 3560): /Length key in stream dictionary is not an integer  
30 -WARNING: issue-101.pdf (trailer, offset 3631): attempting to recover stream length  
31 -WARNING: issue-101.pdf (trailer, offset 3631): recovered stream length: 8  
32 -WARNING: issue-101.pdf (trailer, offset 4113): /Length key in stream dictionary is not an integer  
33 -WARNING: issue-101.pdf (trailer, offset 4184): attempting to recover stream length  
34 -WARNING: issue-101.pdf (trailer, offset 4184): recovered stream length: 8  
35 -WARNING: issue-101.pdf (object 11 0, offset 591): unknown token while reading object; treating as string  
36 -WARNING: issue-101.pdf (object 11 0, offset 625): treating unexpected brace token as null  
37 -WARNING: issue-101.pdf (object 11 0, offset 626): unknown token while reading object; treating as string  
38 -WARNING: issue-101.pdf (object 11 0, offset 637): unknown token while reading object; treating as string  
39 -WARNING: issue-101.pdf (object 11 0, offset 639): unknown token while reading object; treating as string  
40 -WARNING: issue-101.pdf (object 11 0, offset 644): unknown token while reading object; treating as string  
41 -WARNING: issue-101.pdf (object 11 0, offset 644): too many errors; giving up on reading object  
42 -WARNING: issue-101.pdf (object 11 0, offset 647): expected endobj 4 +WARNING: issue-101.pdf (trailer, offset 1508): stream keyword found in trailer
43 qpdf: issue-101.pdf: unable to find /Root dictionary 5 qpdf: issue-101.pdf: unable to find /Root dictionary
qpdf/qtest/qpdf/issue-335a.out
@@ -1015,302 +1015,5 @@ WARNING: issue-335a.pdf (trailer, offset 20606): treating unexpected brace token @@ -1015,302 +1015,5 @@ WARNING: issue-335a.pdf (trailer, offset 20606): treating unexpected brace token
1015 WARNING: issue-335a.pdf (trailer, offset 20606): too many errors; giving up on reading object 1015 WARNING: issue-335a.pdf (trailer, offset 20606): too many errors; giving up on reading object
1016 WARNING: issue-335a.pdf (trailer, offset 20684): unknown token while reading object; treating as string 1016 WARNING: issue-335a.pdf (trailer, offset 20684): unknown token while reading object; treating as string
1017 WARNING: issue-335a.pdf (trailer, offset 20683): expected dictionary key but found non-name object; inserting key /QPDFFake1 1017 WARNING: issue-335a.pdf (trailer, offset 20683): expected dictionary key but found non-name object; inserting key /QPDFFake1
1018 -WARNING: issue-335a.pdf (trailer, offset 20748): stream keyword followed by extraneous whitespace  
1019 -WARNING: issue-335a.pdf (trailer, offset 20679): stream dictionary lacks /Length key  
1020 -WARNING: issue-335a.pdf (trailer, offset 20749): attempting to recover stream length  
1021 -WARNING: issue-335a.pdf (trailer, offset 20749): unable to recover stream data; treating stream as empty  
1022 -WARNING: issue-335a.pdf (trailer, offset 20756): stream dictionary lacks /Length key  
1023 -WARNING: issue-335a.pdf (trailer, offset 20787): attempting to recover stream length  
1024 -WARNING: issue-335a.pdf (trailer, offset 20787): unable to recover stream data; treating stream as empty  
1025 -WARNING: issue-335a.pdf (trailer, offset 20812): unknown token while reading object; treating as string  
1026 -WARNING: issue-335a.pdf (trailer, offset 20803): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1027 -WARNING: issue-335a.pdf (trailer, offset 20803): dictionary has duplicated key /Length; last occurrence overrides earlier ones  
1028 -WARNING: issue-335a.pdf (trailer, offset 20843): stream keyword followed by extraneous whitespace  
1029 -WARNING: issue-335a.pdf (trailer, offset 20800): stream dictionary lacks /Length key  
1030 -WARNING: issue-335a.pdf (trailer, offset 20844): attempting to recover stream length  
1031 -WARNING: issue-335a.pdf (trailer, offset 20844): unable to recover stream data; treating stream as empty  
1032 -WARNING: issue-335a.pdf (trailer, offset 20851): stream dictionary lacks /Length key  
1033 -WARNING: issue-335a.pdf (trailer, offset 20882): attempting to recover stream length  
1034 -WARNING: issue-335a.pdf (trailer, offset 20882): unable to recover stream data; treating stream as empty  
1035 -WARNING: issue-335a.pdf (trailer, offset 20914): unknown token while reading object; treating as string  
1036 -WARNING: issue-335a.pdf (trailer, offset 20898): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1037 -WARNING: issue-335a.pdf (trailer, offset 20895): stream dictionary lacks /Length key  
1038 -WARNING: issue-335a.pdf (trailer, offset 20929): attempting to recover stream length  
1039 -WARNING: issue-335a.pdf (trailer, offset 20929): unable to recover stream data; treating stream as empty  
1040 -WARNING: issue-335a.pdf (trailer, offset 20949): unexpected >  
1041 -WARNING: issue-335a.pdf (trailer, offset 20957): unexpected >  
1042 -WARNING: issue-335a.pdf (trailer, offset 20958): unknown token while reading object; treating as string  
1043 -WARNING: issue-335a.pdf (trailer, offset 20960): unexpected >  
1044 -WARNING: issue-335a.pdf (trailer, offset 20961): unknown token while reading object; treating as string  
1045 -WARNING: issue-335a.pdf (trailer, offset 20972): treating unexpected brace token as null  
1046 -WARNING: issue-335a.pdf (trailer, offset 20973): unexpected )  
1047 -WARNING: issue-335a.pdf (trailer, offset 20973): too many errors; giving up on reading object  
1048 -WARNING: issue-335a.pdf (trailer, offset 21042): unknown token while reading object; treating as string  
1049 -WARNING: issue-335a.pdf (trailer, offset 21026): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1050 -WARNING: issue-335a.pdf (trailer, offset 21023): stream dictionary lacks /Length key  
1051 -WARNING: issue-335a.pdf (trailer, offset 21057): attempting to recover stream length  
1052 -WARNING: issue-335a.pdf (trailer, offset 21057): unable to recover stream data; treating stream as empty  
1053 -WARNING: issue-335a.pdf (trailer, offset 21077): unexpected >  
1054 -WARNING: issue-335a.pdf (trailer, offset 21085): unexpected >  
1055 -WARNING: issue-335a.pdf (trailer, offset 21086): unknown token while reading object; treating as string  
1056 -WARNING: issue-335a.pdf (trailer, offset 21088): unexpected >  
1057 -WARNING: issue-335a.pdf (trailer, offset 21089): unknown token while reading object; treating as string  
1058 -WARNING: issue-335a.pdf (trailer, offset 21100): treating unexpected brace token as null  
1059 -WARNING: issue-335a.pdf (trailer, offset 21101): unexpected )  
1060 -WARNING: issue-335a.pdf (trailer, offset 21101): too many errors; giving up on reading object  
1061 -WARNING: issue-335a.pdf (trailer, offset 21118): unknown token while reading object; treating as string  
1062 -WARNING: issue-335a.pdf (trailer, offset 21158): unexpected )  
1063 -WARNING: issue-335a.pdf (trailer, offset 21202): unknown token while reading object; treating as string  
1064 -WARNING: issue-335a.pdf (trailer, offset 21205): treating unexpected brace token as null  
1065 -WARNING: issue-335a.pdf (trailer, offset 21207): unknown token while reading object; treating as string  
1066 -WARNING: issue-335a.pdf (trailer, offset 21212): unknown token while reading object; treating as string  
1067 -WARNING: issue-335a.pdf (trailer, offset 21212): too many errors; giving up on reading object  
1068 -WARNING: issue-335a.pdf (trailer, offset 21132): unknown token while reading object; treating as string  
1069 -WARNING: issue-335a.pdf (trailer, offset 21138): unknown token while reading object; treating as string  
1070 -WARNING: issue-335a.pdf (trailer, offset 21156): unknown token while reading object; treating as string  
1071 -WARNING: issue-335a.pdf (trailer, offset 21157): unexpected )  
1072 -WARNING: issue-335a.pdf (trailer, offset 21158): unexpected )  
1073 -WARNING: issue-335a.pdf (trailer, offset 21202): unknown token while reading object; treating as string  
1074 -WARNING: issue-335a.pdf (trailer, offset 21202): too many errors; giving up on reading object  
1075 -WARNING: issue-335a.pdf (trailer, offset 21154): treating unexpected brace token as null  
1076 -WARNING: issue-335a.pdf (trailer, offset 21155): unexpected )  
1077 -WARNING: issue-335a.pdf (trailer, offset 21156): unknown token while reading object; treating as string  
1078 -WARNING: issue-335a.pdf (trailer, offset 21157): unexpected )  
1079 -WARNING: issue-335a.pdf (trailer, offset 21158): unexpected )  
1080 -WARNING: issue-335a.pdf (trailer, offset 21202): unknown token while reading object; treating as string  
1081 -WARNING: issue-335a.pdf (trailer, offset 21202): too many errors; giving up on reading object  
1082 -WARNING: issue-335a.pdf (trailer, offset 21172): unknown token while reading object; treating as string  
1083 -WARNING: issue-335a.pdf (trailer, offset 21199): unknown token while reading object; treating as string  
1084 -WARNING: issue-335a.pdf (trailer, offset 21201): unexpected )  
1085 -WARNING: issue-335a.pdf (trailer, offset 21202): unknown token while reading object; treating as string  
1086 -WARNING: issue-335a.pdf (trailer, offset 21205): treating unexpected brace token as null  
1087 -WARNING: issue-335a.pdf (trailer, offset 21207): unknown token while reading object; treating as string  
1088 -WARNING: issue-335a.pdf (trailer, offset 21207): too many errors; giving up on reading object  
1089 -WARNING: issue-335a.pdf (trailer, offset 21228): treating unexpected brace token as null  
1090 -WARNING: issue-335a.pdf (trailer, offset 21229): unexpected )  
1091 -WARNING: issue-335a.pdf (trailer, offset 21230): unknown token while reading object; treating as string  
1092 -WARNING: issue-335a.pdf (trailer, offset 21262): unknown token while reading object; treating as string  
1093 -WARNING: issue-335a.pdf (trailer, offset 21267): unknown token while reading object; treating as string  
1094 -WARNING: issue-335a.pdf (trailer, offset 21277): unknown token while reading object; treating as string  
1095 -WARNING: issue-335a.pdf (trailer, offset 21277): too many errors; giving up on reading object  
1096 -WARNING: issue-335a.pdf (trailer, offset 21277): unknown token while reading object; treating as string  
1097 -WARNING: issue-335a.pdf (trailer, offset 21287): unknown token while reading object; treating as string  
1098 -WARNING: issue-335a.pdf (trailer, offset 21389): unexpected dictionary close token  
1099 -WARNING: issue-335a.pdf (trailer, offset 21392): unknown token while reading object; treating as string  
1100 -WARNING: issue-335a.pdf (trailer, offset 21400): unknown token while reading object; treating as string  
1101 -WARNING: issue-335a.pdf (trailer, offset 21430): unknown token while reading object; treating as string  
1102 -WARNING: issue-335a.pdf (trailer, offset 21438): unknown token while reading object; treating as string  
1103 -WARNING: issue-335a.pdf (trailer, offset 21441): unknown token while reading object; treating as string  
1104 -WARNING: issue-335a.pdf (trailer, offset 21444): unknown token while reading object; treating as string  
1105 -WARNING: issue-335a.pdf (trailer, offset 21452): invalid character (-) in hexstring  
1106 -WARNING: issue-335a.pdf (trailer, offset 21819): unknown token while reading object; treating as string  
1107 -WARNING: issue-335a.pdf (trailer, offset 21819): too many errors; giving up on reading object  
1108 -WARNING: issue-335a.pdf (trailer, offset 21287): unknown token while reading object; treating as string  
1109 -WARNING: issue-335a.pdf (trailer, offset 21389): unexpected dictionary close token  
1110 -WARNING: issue-335a.pdf (trailer, offset 21392): unknown token while reading object; treating as string  
1111 -WARNING: issue-335a.pdf (trailer, offset 21400): unknown token while reading object; treating as string  
1112 -WARNING: issue-335a.pdf (trailer, offset 21430): unknown token while reading object; treating as string  
1113 -WARNING: issue-335a.pdf (trailer, offset 21438): unknown token while reading object; treating as string  
1114 -WARNING: issue-335a.pdf (trailer, offset 21441): unknown token while reading object; treating as string  
1115 -WARNING: issue-335a.pdf (trailer, offset 21444): unknown token while reading object; treating as string  
1116 -WARNING: issue-335a.pdf (trailer, offset 21452): invalid character (-) in hexstring  
1117 -WARNING: issue-335a.pdf (trailer, offset 21819): unknown token while reading object; treating as string  
1118 -WARNING: issue-335a.pdf (trailer, offset 21819): too many errors; giving up on reading object  
1119 -WARNING: issue-335a.pdf (trailer, offset 21407): stream dictionary lacks /Length key  
1120 -WARNING: issue-335a.pdf (trailer, offset 21438): attempting to recover stream length  
1121 -WARNING: issue-335a.pdf (trailer, offset 21438): unable to recover stream data; treating stream as empty  
1122 -WARNING: issue-335a.pdf (trailer, offset 21452): invalid character (-) in hexstring  
1123 -WARNING: issue-335a.pdf (trailer, offset 21837): unknown token while reading object; treating as string  
1124 -WARNING: issue-335a.pdf (trailer, offset 21850): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1125 -WARNING: issue-335a.pdf (trailer, offset 21892): unknown token while reading object; treating as string  
1126 -WARNING: issue-335a.pdf (trailer, offset 21900): unknown token while reading object; treating as string  
1127 -WARNING: issue-335a.pdf (trailer, offset 21903): unknown token while reading object; treating as string  
1128 -WARNING: issue-335a.pdf (trailer, offset 21906): unknown token while reading object; treating as string  
1129 -WARNING: issue-335a.pdf (trailer, offset 21918): unknown token while reading object; treating as string  
1130 -WARNING: issue-335a.pdf (trailer, offset 21925): unknown token while reading object; treating as string  
1131 -WARNING: issue-335a.pdf (trailer, offset 21925): too many errors; giving up on reading object  
1132 -WARNING: issue-335a.pdf (trailer, offset 21918): unknown token while reading object; treating as string  
1133 -WARNING: issue-335a.pdf (trailer, offset 21925): unknown token while reading object; treating as string  
1134 -WARNING: issue-335a.pdf (trailer, offset 21937): unknown token while reading object; treating as string  
1135 -WARNING: issue-335a.pdf (trailer, offset 21962): unknown token while reading object; treating as string  
1136 -WARNING: issue-335a.pdf (trailer, offset 21991): unknown token while reading object; treating as string  
1137 -WARNING: issue-335a.pdf (trailer, offset 22000): invalid character (t) in hexstring  
1138 -WARNING: issue-335a.pdf (trailer, offset 22003): unknown token while reading object; treating as string  
1139 -WARNING: issue-335a.pdf (trailer, offset 22028): unexpected >  
1140 -WARNING: issue-335a.pdf (trailer, offset 22030): unknown token while reading object; treating as string  
1141 -WARNING: issue-335a.pdf (trailer, offset 22038): unknown token while reading object; treating as string  
1142 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1143 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake2  
1144 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake3  
1145 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake4  
1146 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake5  
1147 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake6  
1148 -WARNING: issue-335a.pdf (trailer, offset 21936): dictionary has duplicated key /Length; last occurrence overrides earlier ones  
1149 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake7  
1150 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake8  
1151 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake9  
1152 -WARNING: issue-335a.pdf (trailer, offset 22044): unknown token while reading object; treating as string  
1153 -WARNING: issue-335a.pdf (trailer, offset 22052): unknown token while reading object; treating as string  
1154 -WARNING: issue-335a.pdf (trailer, offset 22064): unknown token while reading object; treating as string  
1155 -WARNING: issue-335a.pdf (trailer, offset 22064): too many errors; giving up on reading object  
1156 -WARNING: issue-335a.pdf (trailer, offset 21937): unknown token while reading object; treating as string  
1157 -WARNING: issue-335a.pdf (trailer, offset 21962): unknown token while reading object; treating as string  
1158 -WARNING: issue-335a.pdf (trailer, offset 21991): unknown token while reading object; treating as string  
1159 -WARNING: issue-335a.pdf (trailer, offset 22000): invalid character (t) in hexstring  
1160 -WARNING: issue-335a.pdf (trailer, offset 22003): unknown token while reading object; treating as string  
1161 -WARNING: issue-335a.pdf (trailer, offset 22028): unexpected >  
1162 -WARNING: issue-335a.pdf (trailer, offset 22030): unknown token while reading object; treating as string  
1163 -WARNING: issue-335a.pdf (trailer, offset 22038): unknown token while reading object; treating as string  
1164 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1165 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake2  
1166 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake3  
1167 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake4  
1168 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake5  
1169 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake6  
1170 -WARNING: issue-335a.pdf (trailer, offset 21936): dictionary has duplicated key /Length; last occurrence overrides earlier ones  
1171 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake7  
1172 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake8  
1173 -WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake9  
1174 -WARNING: issue-335a.pdf (trailer, offset 21932): stream dictionary lacks /Length key  
1175 -WARNING: issue-335a.pdf (trailer, offset 22052): attempting to recover stream length  
1176 -WARNING: issue-335a.pdf (trailer, offset 22052): unable to recover stream data; treating stream as empty  
1177 -WARNING: issue-335a.pdf (trailer, offset 22000): invalid character (t) in hexstring  
1178 -WARNING: issue-335a.pdf (trailer, offset 22088): unknown token while reading object; treating as string  
1179 -WARNING: issue-335a.pdf (trailer, offset 22087): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1180 -WARNING: issue-335a.pdf (trailer, offset 22083): stream dictionary lacks /Length key  
1181 -WARNING: issue-335a.pdf (trailer, offset 22136): attempting to recover stream length  
1182 -WARNING: issue-335a.pdf (trailer, offset 22136): unable to recover stream data; treating stream as empty  
1183 -WARNING: issue-335a.pdf (trailer, offset 22178): unknown token while reading object; treating as string  
1184 -WARNING: issue-335a.pdf (trailer, offset 22190): unknown token while reading object; treating as string  
1185 -WARNING: issue-335a.pdf (trailer, offset 22202): unknown token while reading object; treating as string  
1186 -WARNING: issue-335a.pdf (trailer, offset 22218): unknown token while reading object; treating as string  
1187 -WARNING: issue-335a.pdf (trailer, offset 22201): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1188 -WARNING: issue-335a.pdf (trailer, offset 22201): expected dictionary key but found non-name object; inserting key /QPDFFake2  
1189 -WARNING: issue-335a.pdf (trailer, offset 22230): unknown token while reading object; treating as string  
1190 -WARNING: issue-335a.pdf (trailer, offset 22238): unknown token while reading object; treating as string  
1191 -WARNING: issue-335a.pdf (trailer, offset 22177): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1192 -WARNING: issue-335a.pdf (trailer, offset 22177): expected dictionary key but found non-name object; inserting key /QPDFFake2  
1193 -WARNING: issue-335a.pdf (trailer, offset 22177): expected dictionary key but found non-name object; inserting key /QPDFFake3  
1194 -WARNING: issue-335a.pdf (trailer, offset 22177): expected dictionary key but found non-name object; inserting key /QPDFFake4  
1195 -WARNING: issue-335a.pdf (trailer, offset 22177): expected dictionary key but found non-name object; inserting key /QPDFFake5  
1196 -WARNING: issue-335a.pdf (trailer, offset 22276): stream keyword followed by carriage return only  
1197 -WARNING: issue-335a.pdf (trailer, offset 22173): stream dictionary lacks /Length key  
1198 -WARNING: issue-335a.pdf (trailer, offset 22276): attempting to recover stream length  
1199 -WARNING: issue-335a.pdf (trailer, offset 22276): unable to recover stream data; treating stream as empty  
1200 -WARNING: issue-335a.pdf (trailer, offset 22202): unknown token while reading object; treating as string  
1201 -WARNING: issue-335a.pdf (trailer, offset 22218): unknown token while reading object; treating as string  
1202 -WARNING: issue-335a.pdf (trailer, offset 22201): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1203 -WARNING: issue-335a.pdf (trailer, offset 22201): expected dictionary key but found non-name object; inserting key /QPDFFake2  
1204 -WARNING: issue-335a.pdf (trailer, offset 22197): stream dictionary lacks /Length key  
1205 -WARNING: issue-335a.pdf (trailer, offset 22238): attempting to recover stream length  
1206 -WARNING: issue-335a.pdf (trailer, offset 22238): unable to recover stream data; treating stream as empty  
1207 -WARNING: issue-335a.pdf (trailer, offset 22327): unknown token while reading object; treating as string  
1208 -WARNING: issue-335a.pdf (trailer, offset 22336): unknown token while reading object; treating as string  
1209 -WARNING: issue-335a.pdf (trailer, offset 22338): unknown token while reading object; treating as string  
1210 -WARNING: issue-335a.pdf (trailer, offset 22355): unknown token while reading object; treating as string  
1211 -WARNING: issue-335a.pdf (trailer, offset 22360): unknown token while reading object; treating as string  
1212 -WARNING: issue-335a.pdf (trailer, offset 22326): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1213 -WARNING: issue-335a.pdf (trailer, offset 22326): expected dictionary key but found non-name object; inserting key /QPDFFake2  
1214 -WARNING: issue-335a.pdf (trailer, offset 22326): expected dictionary key but found non-name object; inserting key /QPDFFake3  
1215 -WARNING: issue-335a.pdf (trailer, offset 22326): expected dictionary key but found non-name object; inserting key /QPDFFake4  
1216 -WARNING: issue-335a.pdf (trailer, offset 22326): expected dictionary key but found non-name object; inserting key /QPDFFake5  
1217 -WARNING: issue-335a.pdf (trailer, offset 22322): /Length key in stream dictionary is not an integer  
1218 -WARNING: issue-335a.pdf (trailer, offset 22373): attempting to recover stream length  
1219 -WARNING: issue-335a.pdf (trailer, offset 22373): unable to recover stream data; treating stream as empty  
1220 -WARNING: issue-335a.pdf (trailer, offset 22437): unknown token while reading object; treating as string  
1221 -WARNING: issue-335a.pdf (trailer, offset 22436): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1222 -WARNING: issue-335a.pdf (trailer, offset 22432): stream dictionary lacks /Length key  
1223 -WARNING: issue-335a.pdf (trailer, offset 22484): attempting to recover stream length  
1224 -WARNING: issue-335a.pdf (trailer, offset 22484): unable to recover stream data; treating stream as empty  
1225 -WARNING: issue-335a.pdf (trailer, offset 22650): unknown token while reading object; treating as string  
1226 -WARNING: issue-335a.pdf (trailer, offset 22656): unknown token while reading object; treating as string  
1227 -WARNING: issue-335a.pdf (trailer, offset 22675): unknown token while reading object; treating as string  
1228 -WARNING: issue-335a.pdf (trailer, offset 22687): unknown token while reading object; treating as string  
1229 -WARNING: issue-335a.pdf (trailer, offset 22690): unknown token while reading object; treating as string  
1230 -WARNING: issue-335a.pdf (trailer, offset 22702): unknown token while reading object; treating as string  
1231 -WARNING: issue-335a.pdf (trailer, offset 22701): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1232 -WARNING: issue-335a.pdf (trailer, offset 22740): unknown token while reading object; treating as string  
1233 -WARNING: issue-335a.pdf (trailer, offset 22748): unknown token while reading object; treating as string  
1234 -WARNING: issue-335a.pdf (trailer, offset 22761): unknown token while reading object; treating as string  
1235 -WARNING: issue-335a.pdf (trailer, offset 22791): unknown token while reading object; treating as string  
1236 -WARNING: issue-335a.pdf (trailer, offset 22794): unexpected >  
1237 -WARNING: issue-335a.pdf (trailer, offset 22796): unknown token while reading object; treating as string  
1238 -WARNING: issue-335a.pdf (trailer, offset 22804): unknown token while reading object; treating as string  
1239 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1240 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake2  
1241 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake3  
1242 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake4  
1243 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake5  
1244 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake6  
1245 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake7  
1246 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake8  
1247 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake9  
1248 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake10  
1249 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake11  
1250 -WARNING: issue-335a.pdf (trailer, offset 22810): unknown token while reading object; treating as string  
1251 -WARNING: issue-335a.pdf (trailer, offset 22817): unknown token while reading object; treating as string  
1252 -WARNING: issue-335a.pdf (trailer, offset 22817): too many errors; giving up on reading object  
1253 -WARNING: issue-335a.pdf (trailer, offset 22687): unknown token while reading object; treating as string  
1254 -WARNING: issue-335a.pdf (trailer, offset 22690): unknown token while reading object; treating as string  
1255 -WARNING: issue-335a.pdf (trailer, offset 22702): unknown token while reading object; treating as string  
1256 -WARNING: issue-335a.pdf (trailer, offset 22701): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1257 -WARNING: issue-335a.pdf (trailer, offset 22740): unknown token while reading object; treating as string  
1258 -WARNING: issue-335a.pdf (trailer, offset 22748): unknown token while reading object; treating as string  
1259 -WARNING: issue-335a.pdf (trailer, offset 22761): unknown token while reading object; treating as string  
1260 -WARNING: issue-335a.pdf (trailer, offset 22791): unknown token while reading object; treating as string  
1261 -WARNING: issue-335a.pdf (trailer, offset 22794): unexpected >  
1262 -WARNING: issue-335a.pdf (trailer, offset 22796): unknown token while reading object; treating as string  
1263 -WARNING: issue-335a.pdf (trailer, offset 22804): unknown token while reading object; treating as string  
1264 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1265 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake2  
1266 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake3  
1267 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake4  
1268 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake5  
1269 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake6  
1270 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake7  
1271 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake8  
1272 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake9  
1273 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake10  
1274 -WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake11  
1275 -WARNING: issue-335a.pdf (trailer, offset 22817): stream keyword followed by carriage return only  
1276 -WARNING: issue-335a.pdf (trailer, offset 22682): stream dictionary lacks /Length key  
1277 -WARNING: issue-335a.pdf (trailer, offset 22817): attempting to recover stream length  
1278 -WARNING: issue-335a.pdf (trailer, offset 22817): unable to recover stream data; treating stream as empty  
1279 -WARNING: issue-335a.pdf (trailer, offset 22702): unknown token while reading object; treating as string  
1280 -WARNING: issue-335a.pdf (trailer, offset 22701): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1281 -WARNING: issue-335a.pdf (trailer, offset 22697): stream dictionary lacks /Length key  
1282 -WARNING: issue-335a.pdf (trailer, offset 22748): attempting to recover stream length  
1283 -WARNING: issue-335a.pdf (trailer, offset 22748): unable to recover stream data; treating stream as empty  
1284 -WARNING: issue-335a.pdf (trailer, offset 22845): unknown token while reading object; treating as string  
1285 -WARNING: issue-335a.pdf (trailer, offset 22869): unknown token while reading object; treating as string  
1286 -WARNING: issue-335a.pdf (trailer, offset 22844): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1287 -WARNING: issue-335a.pdf (trailer, offset 22844): expected dictionary key but found non-name object; inserting key /QPDFFake2  
1288 -WARNING: issue-335a.pdf (trailer, offset 22844): expected dictionary key but found non-name object; inserting key /QPDFFake3  
1289 -WARNING: issue-335a.pdf (trailer, offset 22898): expected endstream  
1290 -WARNING: issue-335a.pdf (trailer, offset 22882): attempting to recover stream length  
1291 -WARNING: issue-335a.pdf (trailer, offset 22882): unable to recover stream data; treating stream as empty  
1292 -WARNING: issue-335a.pdf (trailer, offset 23098): invalid character (t) in hexstring  
1293 -WARNING: issue-335a.pdf (trailer, offset 23101): unknown token while reading object; treating as string  
1294 -WARNING: issue-335a.pdf (trailer, offset 23108): unknown token while reading object; treating as string  
1295 -WARNING: issue-335a.pdf (trailer, offset 23130): unknown token while reading object; treating as string  
1296 -WARNING: issue-335a.pdf (trailer, offset 23147): unknown token while reading object; treating as string  
1297 -WARNING: issue-335a.pdf (trailer, offset 23155): unknown token while reading object; treating as string  
1298 -WARNING: issue-335a.pdf (trailer, offset 23155): too many errors; giving up on reading object  
1299 -WARNING: issue-335a.pdf (trailer, offset 23108): unknown token while reading object; treating as string  
1300 -WARNING: issue-335a.pdf (trailer, offset 23130): unknown token while reading object; treating as string  
1301 -WARNING: issue-335a.pdf (trailer, offset 23147): unknown token while reading object; treating as string  
1302 -WARNING: issue-335a.pdf (trailer, offset 23155): unknown token while reading object; treating as string  
1303 -WARNING: issue-335a.pdf (trailer, offset 23196): unknown token while reading object; treating as string  
1304 -WARNING: issue-335a.pdf (trailer, offset 23324): unknown token while reading object; treating as string  
1305 -WARNING: issue-335a.pdf (trailer, offset 23324): too many errors; giving up on reading object  
1306 -WARNING: issue-335a.pdf (trailer, offset 23411): dictionary ended prematurely; using null as value for last key  
1307 -WARNING: issue-335a.pdf (object 5 0, offset 23451): invalid character (ÿ) in hexstring  
1308 -WARNING: issue-335a.pdf (object 5 0, offset 23458): unknown token while reading object; treating as string  
1309 -WARNING: issue-335a.pdf (object 5 0, offset 23444): expected dictionary key but found non-name object; inserting key /QPDFFake1  
1310 -WARNING: issue-335a.pdf (object 5 0, offset 23444): expected dictionary key but found non-name object; inserting key /QPDFFake2  
1311 -WARNING: issue-335a.pdf (object 5 0, offset 23440): stream dictionary lacks /Length key  
1312 -WARNING: issue-335a.pdf (object 5 0, offset 23485): attempting to recover stream length  
1313 -WARNING: issue-335a.pdf (object 5 0, offset 23485): unable to recover stream data; treating stream as empty  
1314 -WARNING: issue-335a.pdf (object 5 0, offset 24974): expected endobj  
1315 -WARNING: issue-335a.pdf (object 5 0, offset 24974): EOF after endobj 1018 +WARNING: issue-335a.pdf (trailer, offset 20747): stream keyword found in trailer
1316 qpdf: issue-335a.pdf: unable to find /Root dictionary 1019 qpdf: issue-335a.pdf: unable to find /Root dictionary