Merge pull request #20170 from calixteman/bug1980958
Don't iterate over all empty slots in the xref entries (bug 1980958)
This commit is contained in:
commit
7a65c58b5e
@ -681,11 +681,15 @@ class XRef {
|
|||||||
// When no trailer dictionary candidate exists, try picking the first
|
// When no trailer dictionary candidate exists, try picking the first
|
||||||
// dictionary that contains a /Root entry (fixes issue18986.pdf).
|
// dictionary that contains a /Root entry (fixes issue18986.pdf).
|
||||||
if (!trailerDicts.length) {
|
if (!trailerDicts.length) {
|
||||||
for (const [num, entry] of this.entries.entries()) {
|
// In case, this.entries is a sparse array we don't want to
|
||||||
if (!entry) {
|
// iterate over empty entries so we use the `in` operator instead of
|
||||||
|
// using for..of on entries() or a for with the array length.
|
||||||
|
for (const num in this.entries) {
|
||||||
|
if (!Object.hasOwn(this.entries, num)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const ref = Ref.get(num, entry.gen);
|
const entry = this.entries[num];
|
||||||
|
const ref = Ref.get(parseInt(num), entry.gen);
|
||||||
let obj;
|
let obj;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -693,6 +697,7 @@ class XRef {
|
|||||||
} catch {
|
} catch {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (obj instanceof BaseStream) {
|
if (obj instanceof BaseStream) {
|
||||||
obj = obj.dict;
|
obj = obj.dict;
|
||||||
}
|
}
|
||||||
|
|||||||
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -741,3 +741,4 @@
|
|||||||
!print_protection.pdf
|
!print_protection.pdf
|
||||||
!tracemonkey_with_annotations.pdf
|
!tracemonkey_with_annotations.pdf
|
||||||
!tracemonkey_with_editable_annotations.pdf
|
!tracemonkey_with_editable_annotations.pdf
|
||||||
|
!bug1980958.pdf
|
||||||
|
|||||||
10
test/pdfs/bug1980958.pdf
Normal file
10
test/pdfs/bug1980958.pdf
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
%PDF-1.7
|
||||||
|
1 0 obj <</Type /Catalog /Pages 2 0 R>>
|
||||||
|
endobj
|
||||||
|
2 0 obj <</Type /Pages /Kids [3 0 R] /Count 1>>
|
||||||
|
endobj
|
||||||
|
3 0 obj <</Type /Page /Parent 2 0 R /MediaBox [0 0 10 10]>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
2147483647 0 obj <</Root 1 0 R>>
|
||||||
|
endobj
|
||||||
@ -878,6 +878,20 @@ describe("api", function () {
|
|||||||
|
|
||||||
await loadingTask.destroy();
|
await loadingTask.destroy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("Doesn't iterate over all empty slots in the xref entries (bug 1980958)", async function () {
|
||||||
|
if (isNodeJS) {
|
||||||
|
pending("Worker is not supported in Node.js.");
|
||||||
|
}
|
||||||
|
const loadingTask = getDocument(buildGetDocumentParams("bug1980958.pdf"));
|
||||||
|
const { promise, resolve } = Promise.withResolvers();
|
||||||
|
setTimeout(() => resolve(null), 1000);
|
||||||
|
|
||||||
|
const pdfDocument = await Promise.race([loadingTask.promise, promise]);
|
||||||
|
expect(pdfDocument?.numPages).toEqual(1);
|
||||||
|
|
||||||
|
loadingTask._worker.destroy();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("PDFWorker", function () {
|
describe("PDFWorker", function () {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user