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 1006 void insertFreeXrefEntry(QPDFObjGen);
1007 1007 void insertReconstructedXrefEntry(int obj, qpdf_offset_t f1, int f2);
1008 1008 void setLastObjectDescription(std::string const& description, QPDFObjGen const& og);
  1009 + QPDFObjectHandle readTrailer();
1009 1010 QPDFObjectHandle readObject(std::string const& description, QPDFObjGen og);
1010 1011 QPDFObjectHandle readObjectInStream(std::shared_ptr<InputSource>, QPDFObjGen og);
1011 1012 size_t recoverStreamLength(
... ...
libqpdf/QPDF.cc
... ... @@ -567,7 +567,7 @@ QPDF::reconstruct_xref(QPDFExc&amp; e)
567 567 insertReconstructedXrefEntry(obj, token_start, gen);
568 568 }
569 569 } else if (!m->trailer.isInitialized() && t1.isWord("trailer")) {
570   - QPDFObjectHandle t = readObject("trailer", QPDFObjGen());
  570 + QPDFObjectHandle t = readTrailer();
571 571 if (!t.isDictionary()) {
572 572 // Oh well. It was worth a try.
573 573 } else {
... ... @@ -855,7 +855,7 @@ QPDF::read_xrefTable(qpdf_offset_t xref_offset)
855 855 }
856 856  
857 857 // Set offset to previous xref table if any
858   - QPDFObjectHandle cur_trailer = readObject("trailer", QPDFObjGen());
  858 + QPDFObjectHandle cur_trailer = readTrailer();
859 859 if (!cur_trailer.isDictionary()) {
860 860 QTC::TC("qpdf", "QPDF missing trailer");
861 861 throw damagedPDF("", "expected trailer dictionary");
... ... @@ -1268,6 +1268,25 @@ QPDF::setLastObjectDescription(std::string const&amp; description, QPDFObjGen const&amp;
1268 1268 }
1269 1269  
1270 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 1290 QPDF::readObject(std::string const& description, QPDFObjGen og)
1272 1291 {
1273 1292 setLastObjectDescription(description, og);
... ...
qpdf/qtest/qpdf/issue-100.out
1 1 WARNING: issue-100.pdf: file is damaged
2 2 WARNING: issue-100.pdf (offset 736): xref not found
3 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 5 qpdf: issue-100.pdf: unable to find /Root dictionary
... ...
qpdf/qtest/qpdf/issue-101.out
1 1 WARNING: issue-101.pdf: file is damaged
2 2 WARNING: issue-101.pdf (offset 3526): xref not found
3 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 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 1015 WARNING: issue-335a.pdf (trailer, offset 20606): too many errors; giving up on reading object
1016 1016 WARNING: issue-335a.pdf (trailer, offset 20684): unknown token while reading object; treating as string
1017 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 1019 qpdf: issue-335a.pdf: unable to find /Root dictionary
... ...