Commit 2c2436b23c683d0e64e47b1a5ca66c633558a6c6
Committed by
GitHub
Merge pull request #1004 from m-holger/ro
Split QPDF::readObject into readTrailer, readObject and readObjectInStream
Showing
5 changed files
with
151 additions
and
465 deletions
include/qpdf/QPDF.hh
| ... | ... | @@ -1006,11 +1006,11 @@ 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 readObject( | |
| 1010 | - std::shared_ptr<InputSource>, | |
| 1011 | - std::string const& description, | |
| 1012 | - QPDFObjGen const& og, | |
| 1013 | - bool in_object_stream); | |
| 1009 | + QPDFObjectHandle readTrailer(); | |
| 1010 | + QPDFObjectHandle readObject(std::string const& description, QPDFObjGen og); | |
| 1011 | + void readStream(QPDFObjectHandle& object, QPDFObjGen og, qpdf_offset_t offset); | |
| 1012 | + void validateStreamLineEnd(QPDFObjectHandle& object, QPDFObjGen og, qpdf_offset_t offset); | |
| 1013 | + QPDFObjectHandle readObjectInStream(std::shared_ptr<InputSource>& input, int obj); | |
| 1014 | 1014 | size_t recoverStreamLength( |
| 1015 | 1015 | std::shared_ptr<InputSource> input, QPDFObjGen const& og, qpdf_offset_t stream_offset); |
| 1016 | 1016 | QPDFTokenizer::Token readToken(std::shared_ptr<InputSource>, size_t max_len = 0); | ... | ... |
libqpdf/QPDF.cc
| ... | ... | @@ -567,7 +567,7 @@ QPDF::reconstruct_xref(QPDFExc& e) |
| 567 | 567 | insertReconstructedXrefEntry(obj, token_start, gen); |
| 568 | 568 | } |
| 569 | 569 | } else if (!m->trailer.isInitialized() && t1.isWord("trailer")) { |
| 570 | - QPDFObjectHandle t = readObject(m->file, "trailer", QPDFObjGen(), false); | |
| 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(m->file, "trailer", QPDFObjGen(), false); | |
| 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,124 +1268,160 @@ QPDF::setLastObjectDescription(std::string const& description, QPDFObjGen const& |
| 1268 | 1268 | } |
| 1269 | 1269 | |
| 1270 | 1270 | QPDFObjectHandle |
| 1271 | -QPDF::readObject( | |
| 1272 | - std::shared_ptr<InputSource> input, | |
| 1273 | - std::string const& description, | |
| 1274 | - QPDFObjGen const& og, | |
| 1275 | - bool in_object_stream) | |
| 1271 | +QPDF::readTrailer() | |
| 1276 | 1272 | { |
| 1277 | - setLastObjectDescription(description, og); | |
| 1278 | - qpdf_offset_t offset = input->tell(); | |
| 1279 | - | |
| 1273 | + qpdf_offset_t offset = m->file->tell(); | |
| 1280 | 1274 | bool empty = false; |
| 1281 | - std::shared_ptr<StringDecrypter> decrypter_ph; | |
| 1282 | - StringDecrypter* decrypter = nullptr; | |
| 1283 | - if (m->encp->encrypted && (!in_object_stream)) { | |
| 1284 | - decrypter_ph = std::make_shared<StringDecrypter>(this, og); | |
| 1285 | - decrypter = decrypter_ph.get(); | |
| 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")); | |
| 1286 | 1282 | } |
| 1287 | - auto object = QPDFParser(input, m->last_object_description, m->tokenizer, decrypter, this) | |
| 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 | |
| 1290 | +QPDF::readObject(std::string const& description, QPDFObjGen og) | |
| 1291 | +{ | |
| 1292 | + setLastObjectDescription(description, og); | |
| 1293 | + qpdf_offset_t offset = m->file->tell(); | |
| 1294 | + bool empty = false; | |
| 1295 | + | |
| 1296 | + StringDecrypter decrypter{this, og}; | |
| 1297 | + StringDecrypter* decrypter_ptr = m->encp->encrypted ? &decrypter : nullptr; | |
| 1298 | + auto object = QPDFParser(m->file, m->last_object_description, m->tokenizer, decrypter_ptr, this) | |
| 1288 | 1299 | .parse(empty, false); |
| 1289 | 1300 | if (empty) { |
| 1290 | 1301 | // Nothing in the PDF spec appears to allow empty objects, but they have been encountered in |
| 1291 | 1302 | // actual PDF files and Adobe Reader appears to ignore them. |
| 1292 | - warn(damagedPDF(input, input->getLastOffset(), "empty object treated as null")); | |
| 1293 | - } else if (object.isDictionary() && (!in_object_stream)) { | |
| 1294 | - // check for stream | |
| 1295 | - qpdf_offset_t cur_offset = input->tell(); | |
| 1296 | - if (readToken(input).isWord("stream")) { | |
| 1297 | - // The PDF specification states that the word "stream" should be followed by either a | |
| 1298 | - // carriage return and a newline or by a newline alone. It specifically disallowed | |
| 1299 | - // following it by a carriage return alone since, in that case, there would be no way to | |
| 1300 | - // tell whether the NL in a CR NL sequence was part of the stream data. However, some | |
| 1301 | - // readers, including Adobe reader, accept a carriage return by itself when followed by | |
| 1302 | - // a non-newline character, so that's what we do here. We have also seen files that have | |
| 1303 | - // extraneous whitespace between the stream keyword and the newline. | |
| 1304 | - bool done = false; | |
| 1305 | - while (!done) { | |
| 1306 | - done = true; | |
| 1307 | - char ch; | |
| 1308 | - if (input->read(&ch, 1) == 0) { | |
| 1309 | - // A premature EOF here will result in some other problem that will get reported | |
| 1310 | - // at another time. | |
| 1311 | - } else if (ch == '\n') { | |
| 1312 | - // ready to read stream data | |
| 1313 | - QTC::TC("qpdf", "QPDF stream with NL only"); | |
| 1314 | - } else if (ch == '\r') { | |
| 1315 | - // Read another character | |
| 1316 | - if (input->read(&ch, 1) != 0) { | |
| 1317 | - if (ch == '\n') { | |
| 1318 | - // Ready to read stream data | |
| 1319 | - QTC::TC("qpdf", "QPDF stream with CRNL"); | |
| 1320 | - } else { | |
| 1321 | - // Treat the \r by itself as the whitespace after endstream and start | |
| 1322 | - // reading stream data in spite of not having seen a newline. | |
| 1323 | - QTC::TC("qpdf", "QPDF stream with CR only"); | |
| 1324 | - input->unreadCh(ch); | |
| 1325 | - warn(damagedPDF( | |
| 1326 | - input, | |
| 1327 | - input->tell(), | |
| 1328 | - "stream keyword followed by carriage return " | |
| 1329 | - "only")); | |
| 1330 | - } | |
| 1331 | - } | |
| 1332 | - } else if (QUtil::is_space(ch)) { | |
| 1333 | - warn(damagedPDF( | |
| 1334 | - input, input->tell(), "stream keyword followed by extraneous whitespace")); | |
| 1335 | - done = false; | |
| 1336 | - } else { | |
| 1337 | - QTC::TC("qpdf", "QPDF stream without newline"); | |
| 1338 | - input->unreadCh(ch); | |
| 1339 | - warn(damagedPDF( | |
| 1340 | - input, | |
| 1341 | - input->tell(), | |
| 1342 | - "stream keyword not followed by proper line " | |
| 1343 | - "terminator")); | |
| 1344 | - } | |
| 1345 | - } | |
| 1303 | + warn(damagedPDF(m->file, m->file->getLastOffset(), "empty object treated as null")); | |
| 1304 | + return object; | |
| 1305 | + } | |
| 1306 | + auto token = readToken(m->file); | |
| 1307 | + if (object.isDictionary() && token.isWord("stream")) { | |
| 1308 | + readStream(object, og, offset); | |
| 1309 | + token = readToken(m->file); | |
| 1310 | + } | |
| 1311 | + if (!token.isWord("endobj")) { | |
| 1312 | + QTC::TC("qpdf", "QPDF err expected endobj"); | |
| 1313 | + warn(damagedPDF("expected endobj")); | |
| 1314 | + } | |
| 1315 | + return object; | |
| 1316 | +} | |
| 1346 | 1317 | |
| 1347 | - // Must get offset before accessing any additional objects since resolving a previously | |
| 1348 | - // unresolved indirect object will change file position. | |
| 1349 | - qpdf_offset_t stream_offset = input->tell(); | |
| 1350 | - size_t length = 0; | |
| 1318 | +// After reading stream dictionary and stream keyword, read rest of stream. | |
| 1319 | +void | |
| 1320 | +QPDF::readStream(QPDFObjectHandle& object, QPDFObjGen og, qpdf_offset_t offset) | |
| 1321 | +{ | |
| 1322 | + validateStreamLineEnd(object, og, offset); | |
| 1351 | 1323 | |
| 1352 | - try { | |
| 1353 | - auto length_obj = object.getKey("/Length"); | |
| 1324 | + // Must get offset before accessing any additional objects since resolving a previously | |
| 1325 | + // unresolved indirect object will change file position. | |
| 1326 | + qpdf_offset_t stream_offset = m->file->tell(); | |
| 1327 | + size_t length = 0; | |
| 1354 | 1328 | |
| 1355 | - if (!length_obj.isInteger()) { | |
| 1356 | - if (length_obj.isNull()) { | |
| 1357 | - QTC::TC("qpdf", "QPDF stream without length"); | |
| 1358 | - throw damagedPDF(input, offset, "stream dictionary lacks /Length key"); | |
| 1359 | - } | |
| 1360 | - QTC::TC("qpdf", "QPDF stream length not integer"); | |
| 1361 | - throw damagedPDF( | |
| 1362 | - input, offset, "/Length key in stream dictionary is not an integer"); | |
| 1363 | - } | |
| 1329 | + try { | |
| 1330 | + auto length_obj = object.getKey("/Length"); | |
| 1364 | 1331 | |
| 1365 | - length = toS(length_obj.getUIntValue()); | |
| 1366 | - // Seek in two steps to avoid potential integer overflow | |
| 1367 | - input->seek(stream_offset, SEEK_SET); | |
| 1368 | - input->seek(toO(length), SEEK_CUR); | |
| 1369 | - if (!readToken(input).isWord("endstream")) { | |
| 1370 | - QTC::TC("qpdf", "QPDF missing endstream"); | |
| 1371 | - throw damagedPDF(input, input->getLastOffset(), "expected endstream"); | |
| 1372 | - } | |
| 1373 | - } catch (QPDFExc& e) { | |
| 1374 | - if (m->attempt_recovery) { | |
| 1375 | - warn(e); | |
| 1376 | - length = recoverStreamLength(input, og, stream_offset); | |
| 1332 | + if (!length_obj.isInteger()) { | |
| 1333 | + if (length_obj.isNull()) { | |
| 1334 | + QTC::TC("qpdf", "QPDF stream without length"); | |
| 1335 | + throw damagedPDF(offset, "stream dictionary lacks /Length key"); | |
| 1336 | + } | |
| 1337 | + QTC::TC("qpdf", "QPDF stream length not integer"); | |
| 1338 | + throw damagedPDF(offset, "/Length key in stream dictionary is not an integer"); | |
| 1339 | + } | |
| 1340 | + | |
| 1341 | + length = toS(length_obj.getUIntValue()); | |
| 1342 | + // Seek in two steps to avoid potential integer overflow | |
| 1343 | + m->file->seek(stream_offset, SEEK_SET); | |
| 1344 | + m->file->seek(toO(length), SEEK_CUR); | |
| 1345 | + if (!readToken(m->file).isWord("endstream")) { | |
| 1346 | + QTC::TC("qpdf", "QPDF missing endstream"); | |
| 1347 | + throw damagedPDF("expected endstream"); | |
| 1348 | + } | |
| 1349 | + } catch (QPDFExc& e) { | |
| 1350 | + if (m->attempt_recovery) { | |
| 1351 | + warn(e); | |
| 1352 | + length = recoverStreamLength(m->file, og, stream_offset); | |
| 1353 | + } else { | |
| 1354 | + throw; | |
| 1355 | + } | |
| 1356 | + } | |
| 1357 | + object = newIndirect(og, QPDF_Stream::create(this, og, object, stream_offset, length)); | |
| 1358 | +} | |
| 1359 | + | |
| 1360 | +void | |
| 1361 | +QPDF::validateStreamLineEnd(QPDFObjectHandle& object, QPDFObjGen og, qpdf_offset_t offset) | |
| 1362 | +{ | |
| 1363 | + // The PDF specification states that the word "stream" should be followed by either a carriage | |
| 1364 | + // return and a newline or by a newline alone. It specifically disallowed following it by a | |
| 1365 | + // carriage return alone since, in that case, there would be no way to tell whether the NL in a | |
| 1366 | + // CR NL sequence was part of the stream data. However, some readers, including Adobe reader, | |
| 1367 | + // accept a carriage return by itself when followed by a non-newline character, so that's what | |
| 1368 | + // we do here. We have also seen files that have extraneous whitespace between the stream | |
| 1369 | + // keyword and the newline. | |
| 1370 | + while (true) { | |
| 1371 | + char ch; | |
| 1372 | + if (m->file->read(&ch, 1) == 0) { | |
| 1373 | + // A premature EOF here will result in some other problem that will get reported at | |
| 1374 | + // another time. | |
| 1375 | + return; | |
| 1376 | + } | |
| 1377 | + if (ch == '\n') { | |
| 1378 | + // ready to read stream data | |
| 1379 | + QTC::TC("qpdf", "QPDF stream with NL only"); | |
| 1380 | + return; | |
| 1381 | + } | |
| 1382 | + if (ch == '\r') { | |
| 1383 | + // Read another character | |
| 1384 | + if (m->file->read(&ch, 1) != 0) { | |
| 1385 | + if (ch == '\n') { | |
| 1386 | + // Ready to read stream data | |
| 1387 | + QTC::TC("qpdf", "QPDF stream with CRNL"); | |
| 1377 | 1388 | } else { |
| 1378 | - throw; | |
| 1389 | + // Treat the \r by itself as the whitespace after endstream and start reading | |
| 1390 | + // stream data in spite of not having seen a newline. | |
| 1391 | + QTC::TC("qpdf", "QPDF stream with CR only"); | |
| 1392 | + m->file->unreadCh(ch); | |
| 1393 | + warn(damagedPDF( | |
| 1394 | + m->file->tell(), "stream keyword followed by carriage return only")); | |
| 1379 | 1395 | } |
| 1380 | 1396 | } |
| 1381 | - object = newIndirect(og, QPDF_Stream::create(this, og, object, stream_offset, length)); | |
| 1382 | - } else { | |
| 1383 | - input->seek(cur_offset, SEEK_SET); | |
| 1397 | + return; | |
| 1384 | 1398 | } |
| 1399 | + if (!QUtil::is_space(ch)) { | |
| 1400 | + QTC::TC("qpdf", "QPDF stream without newline"); | |
| 1401 | + m->file->unreadCh(ch); | |
| 1402 | + warn(damagedPDF( | |
| 1403 | + m->file->tell(), "stream keyword not followed by proper line terminator")); | |
| 1404 | + return; | |
| 1405 | + } | |
| 1406 | + warn(damagedPDF(m->file->tell(), "stream keyword followed by extraneous whitespace")); | |
| 1385 | 1407 | } |
| 1408 | +} | |
| 1386 | 1409 | |
| 1387 | - // Override last_offset so that it points to the beginning of the object we just read | |
| 1388 | - input->setLastOffset(offset); | |
| 1410 | +QPDFObjectHandle | |
| 1411 | +QPDF::readObjectInStream(std::shared_ptr<InputSource>& input, int obj) | |
| 1412 | +{ | |
| 1413 | + m->last_object_description.erase(7); // last_object_description starts with "object " | |
| 1414 | + m->last_object_description += std::to_string(obj); | |
| 1415 | + m->last_object_description += " 0"; | |
| 1416 | + | |
| 1417 | + bool empty = false; | |
| 1418 | + auto object = QPDFParser(input, m->last_object_description, m->tokenizer, nullptr, this) | |
| 1419 | + .parse(empty, false); | |
| 1420 | + if (empty) { | |
| 1421 | + // Nothing in the PDF spec appears to allow empty objects, but they have been encountered in | |
| 1422 | + // actual PDF files and Adobe Reader appears to ignore them. | |
| 1423 | + warn(damagedPDF(input, input->getLastOffset(), "empty object treated as null")); | |
| 1424 | + } | |
| 1389 | 1425 | return object; |
| 1390 | 1426 | } |
| 1391 | 1427 | |
| ... | ... | @@ -1559,12 +1595,7 @@ QPDF::readObjectAtOffset( |
| 1559 | 1595 | } |
| 1560 | 1596 | } |
| 1561 | 1597 | |
| 1562 | - QPDFObjectHandle oh = readObject(m->file, description, og, false); | |
| 1563 | - | |
| 1564 | - if (!readToken(m->file).isWord("endobj")) { | |
| 1565 | - QTC::TC("qpdf", "QPDF err expected endobj"); | |
| 1566 | - warn(damagedPDF("expected endobj")); | |
| 1567 | - } | |
| 1598 | + QPDFObjectHandle oh = readObject(description, og); | |
| 1568 | 1599 | |
| 1569 | 1600 | if (isUnresolved(og)) { |
| 1570 | 1601 | // Store the object in the cache here so it gets cached whether we first know the offset or |
| ... | ... | @@ -1744,13 +1775,15 @@ QPDF::resolveObjectsInStream(int obj_stream_number) |
| 1744 | 1775 | // found here in the cache. Remember that some objects stored here might have been overridden |
| 1745 | 1776 | // by new objects appended to the file, so it is necessary to recheck the xref table and only |
| 1746 | 1777 | // cache what would actually be resolved here. |
| 1778 | + m->last_object_description.clear(); | |
| 1779 | + m->last_object_description += "object "; | |
| 1747 | 1780 | for (auto const& iter: offsets) { |
| 1748 | 1781 | QPDFObjGen og(iter.first, 0); |
| 1749 | 1782 | QPDFXRefEntry const& entry = m->xref_table[og]; |
| 1750 | 1783 | if ((entry.getType() == 2) && (entry.getObjStreamNumber() == obj_stream_number)) { |
| 1751 | 1784 | int offset = iter.second; |
| 1752 | 1785 | input->seek(offset, SEEK_SET); |
| 1753 | - QPDFObjectHandle oh = readObject(input, "", og, true); | |
| 1786 | + QPDFObjectHandle oh = readObjectInStream(input, iter.first); | |
| 1754 | 1787 | updateCache(og, oh.getObj(), end_before_space, end_after_space); |
| 1755 | 1788 | } else { |
| 1756 | 1789 | QTC::TC("qpdf", "QPDF not caching overridden objstm object"); | ... | ... |
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 | ... | ... |