mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-29 15:47:57 +02:00
Merge pull request #19836 from Snuffleupagus/issue-19835
Always fallback to checking all destinations, when lookup fails (issue 19835)
This commit is contained in:
commit
c8ed291cf9
4 changed files with 36 additions and 5 deletions
|
@ -682,7 +682,7 @@ class Catalog {
|
||||||
const dest = fetchDest(value);
|
const dest = fetchDest(value);
|
||||||
if (dest) {
|
if (dest) {
|
||||||
// Always let the NameTree take precedence.
|
// Always let the NameTree take precedence.
|
||||||
dests[key] ||= dest;
|
dests[stringToPDFString(key)] ||= dest;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -701,12 +701,12 @@ class Catalog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rawDests[0] instanceof NameTree) {
|
// Always fallback to checking all destinations, in order to support:
|
||||||
// Fallback to checking the *entire* NameTree, in an attempt to handle
|
// - PDF documents with out-of-order NameTrees (fixes issue 10272).
|
||||||
// corrupt PDF documents with out-of-order NameTrees (fixes issue 10272).
|
// - Destination keys that use PDFDocEncoding (fixes issue 19835).
|
||||||
|
if (rawDests.length) {
|
||||||
const dest = this.destinations[id];
|
const dest = this.destinations[id];
|
||||||
if (dest) {
|
if (dest) {
|
||||||
warn(`Found "${id}" at an incorrect position in the NameTree.`);
|
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
1
test/pdfs/issue19835.pdf.link
Normal file
1
test/pdfs/issue19835.pdf.link
Normal file
|
@ -0,0 +1 @@
|
||||||
|
https://github.com/user-attachments/files/19825124/AAPL-2024-09-28-10-K-d71aeb7ff955e2fc4770624610676221.pdf
|
|
@ -23,6 +23,14 @@
|
||||||
"link": true,
|
"link": true,
|
||||||
"type": "other"
|
"type": "other"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "issue19835",
|
||||||
|
"file": "pdfs/issue19835.pdf",
|
||||||
|
"md5": "2940a2f8a41fae299b9a599b8364d05c",
|
||||||
|
"rounds": 1,
|
||||||
|
"link": true,
|
||||||
|
"type": "other"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "filled-background-range",
|
"id": "filled-background-range",
|
||||||
"file": "pdfs/filled-background.pdf",
|
"file": "pdfs/filled-background.pdf",
|
||||||
|
|
|
@ -1399,6 +1399,28 @@ describe("api", function () {
|
||||||
await loadingTask.destroy();
|
await loadingTask.destroy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("gets a destination, from /Dests dictionary with keys using PDFDocEncoding", async function () {
|
||||||
|
if (isNodeJS) {
|
||||||
|
pending("Linked test-cases are not supported in Node.js.");
|
||||||
|
}
|
||||||
|
const loadingTask = getDocument(buildGetDocumentParams("issue19835.pdf"));
|
||||||
|
const pdfDoc = await loadingTask.promise;
|
||||||
|
|
||||||
|
const page3 = await pdfDoc.getPage(3);
|
||||||
|
const annots = await page3.getAnnotations();
|
||||||
|
|
||||||
|
const annot = annots.find(x => x.id === "22R");
|
||||||
|
// Sanity check to make sure that we found the "correct" annotation.
|
||||||
|
expect(annot.dest).toEqual(
|
||||||
|
"\u00f2\u00ab\u00d9\u0025\u006f\u2030\u0062\u2122\u0030\u00ab\u00f4\u0047\u0016\u0142\u00e8\u00bd\u2014\u0063\u00a1\u00db"
|
||||||
|
);
|
||||||
|
|
||||||
|
const dest = await pdfDoc.getDestination(annot.dest);
|
||||||
|
expect(dest).toEqual([2, { name: "XYZ" }, 34.0799999, 315.439999, 0]);
|
||||||
|
|
||||||
|
await loadingTask.destroy();
|
||||||
|
});
|
||||||
|
|
||||||
it("gets non-string destination", async function () {
|
it("gets non-string destination", async function () {
|
||||||
let numberPromise = pdfDocument.getDestination(4.3);
|
let numberPromise = pdfDocument.getDestination(4.3);
|
||||||
let booleanPromise = pdfDocument.getDestination(true);
|
let booleanPromise = pdfDocument.getDestination(true);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue