From e591378ff1c48b7b88a993647d082f21c9fd091b Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 20 Oct 2022 14:15:58 +0200 Subject: [PATCH] Restore a weaker version of the /Pages dictionary /Count check for corrupt documents (PR 15593 follow-up) It appears that PR 15593 broke `issue12402`, and we thus need to partially restore the /Count check. I completely missed this when looking at the test-results for PR 15593, both locally and on the bots, since the `Driver._getLastPageNumber` method would "swallow" an unavailable page number. --- src/core/xref.js | 7 ++++++- test/driver.js | 6 +----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/core/xref.js b/src/core/xref.js index d75b899b9..e273eeeba 100644 --- a/src/core/xref.js +++ b/src/core/xref.js @@ -582,6 +582,7 @@ class XRef { continue; } // Do some basic validation of the trailer/root dictionary candidate. + let validPagesDict = false; try { const rootDict = dict.get("Root"); if (!(rootDict instanceof Dict)) { @@ -591,13 +592,17 @@ class XRef { if (!(pagesDict instanceof Dict)) { continue; } + const pagesCount = pagesDict.get("Count"); + if (Number.isInteger(pagesCount)) { + validPagesDict = true; + } // The top-level /Pages dictionary isn't obviously corrupt. } catch (ex) { trailerError = ex; continue; } // taking the first one with 'ID' - if (dict.has("ID")) { + if (validPagesDict && dict.has("ID")) { return dict; } // The current dictionary is a candidate, but continue searching. diff --git a/test/driver.js b/test/driver.js index 9af37977c..eb51d3909 100644 --- a/test/driver.js +++ b/test/driver.js @@ -553,11 +553,7 @@ class Driver { if (!task.pdfDoc) { return task.firstPage || 1; } - let lastPageNumber = task.lastPage || 0; - if (!lastPageNumber || lastPageNumber > task.pdfDoc.numPages) { - lastPageNumber = task.pdfDoc.numPages; - } - return lastPageNumber; + return task.lastPage || task.pdfDoc.numPages; } _nextPage(task, loadError) {