fix(pdf): reject requested pages outside the document range (#118639)

This commit is contained in:
Peter Steinberger
2026-08-03 04:28:17 -07:00
committed by GitHub
parent 629bf6f2d3
commit 8d1fe4f091
2 changed files with 21 additions and 0 deletions
@@ -176,6 +176,24 @@ describe("PDF document extractor", () => {
);
});
it("rejects selected pages outside the PDF page count before extraction", async () => {
pdfDocument.pageCount = 1;
pdfDocument.extract.mockResolvedValueOnce({ text: "", images: [] });
const extractor = createPdfDocumentExtractor();
await expect(extractor.extract(request({ pageNumbers: [2] }))).rejects.toThrow(
"No requested PDF pages exist in this 1-page document.",
);
expect(pdfDocument.extract).not.toHaveBeenCalled();
expect(pdfDocument.destroy).toHaveBeenCalledTimes(1);
await expect(extractor.extract(request({ pageNumbers: [] }))).resolves.toEqual({
text: "",
images: [],
});
expect(pdfDocument.destroy).toHaveBeenCalledTimes(2);
});
it("reports image fallback failures and returns extracted text", async () => {
const onImageExtractionError = vi.fn();
const failure = new Error("render failed");
@@ -70,6 +70,9 @@ async function extractPdfContent(
.filter((p) => Number.isInteger(p) && p >= 1 && p <= pdf.pageCount)
.slice(0, request.maxPages)
: undefined;
if (request.pageNumbers?.length && pages?.length === 0) {
throw new Error(`No requested PDF pages exist in this ${pdf.pageCount}-page document.`);
}
const pageSelection = pages ? { pages } : { maxPages: request.maxPages };
const textResult = await pdf.extract({