diff --git a/src/core/xref.js b/src/core/xref.js index 4a02f5ed8..da7491075 100644 --- a/src/core/xref.js +++ b/src/core/xref.js @@ -961,6 +961,15 @@ class XRef { ); } nums[i] = num; + + // The entry in the xref table is the object number followed by the index. + // So if index (gen number) is not the same as the index (i), we fix it + // (fixes bug 1978317). + const entry = this.getEntry(num); + if (entry?.offset === tableOffset && entry.gen !== i) { + entry.gen = i; + } + offsets[i] = offset; } diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 2337dbcaf..3e8a6d274 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -735,3 +735,4 @@ !issue20102.pdf !issue20065.pdf !bug1708041.pdf +!bug1978317.pdf diff --git a/test/pdfs/bug1978317.pdf b/test/pdfs/bug1978317.pdf new file mode 100755 index 000000000..d38d055f2 Binary files /dev/null and b/test/pdfs/bug1978317.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 33c925e43..2e28f992f 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -12221,5 +12221,12 @@ "rounds": 1, "disableFontFace": true, "type": "eq" + }, + { + "id": "bug1978317", + "file": "pdfs/bug1978317.pdf", + "md5": "ae4f643ee9bb0fd725277a9d1e0fb1df", + "rounds": 1, + "type": "load" } ]