1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-20 15:18:08 +02:00

Ensure that ChunkedStream won't attempt to request data *beyond* the document size (issue 14303)

This bug was surprisingly difficult to track down, since it didn't just depend on range-requests being used but also on how quickly the document was loaded. To even be able to reproduce this locally, I had to use a very small `rangeChunkSize`-value (note the unit-test).

The cause of this bug is a bogus entry in the XRef-table, causing us to attempt to request data from *beyond* the actual document size and thus getting into an infinite loop.

Fixes *one* of the issues listed in issue 14303, namely the `PDFBOX-4352-0.pdf` document.
This commit is contained in:
Jonas Jenwald 2021-11-24 18:55:28 +01:00
parent 5e2aec7dd7
commit ae4f1ae3e7
4 changed files with 28 additions and 4 deletions

View file

@ -486,4 +486,5 @@
!pr12828.pdf
!secHandler.pdf
!rc_annotation.pdf
!issue14267.pdf
!issue14267.pdf
!PDFBOX-4352-0.pdf

BIN
test/pdfs/PDFBOX-4352-0.pdf Normal file

Binary file not shown.

View file

@ -443,6 +443,21 @@ describe("api", function () {
await Promise.all([loadingTask1.destroy(), loadingTask2.destroy()]);
});
it("creates pdf doc from PDF file with bad XRef table", async function () {
// A corrupt PDF file, where the XRef table have (some) bogus entries.
const loadingTask = getDocument(
buildGetDocumentParams("PDFBOX-4352-0.pdf", {
rangeChunkSize: 100,
})
);
expect(loadingTask instanceof PDFDocumentLoadingTask).toEqual(true);
const pdfDocument = await loadingTask.promise;
expect(pdfDocument.numPages).toEqual(1);
await loadingTask.destroy();
});
});
describe("PDFWorker", function () {