Skip to content

Commit 36486b2

Browse files
committed
fix: reject fractional page numbers in PDF tool page range parser
parsePageRange used Number(part) which accepts fractional values like "1.5". The document-extract fallback later filters non-integer pages with Number.isInteger, silently dropping them and producing empty extraction results. Add Number.isInteger check at parse time to reject fractional input with a clear error. Closes #99393
1 parent e272da5 commit 36486b2

2 files changed

Lines changed: 9 additions & 1 deletion

File tree

src/agents/tools/pdf-tool.helpers.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,14 @@ describe("parsePageRange", () => {
8686
expect(() => parsePageRange("-1", 20)).toThrow("Invalid page number");
8787
});
8888

89+
it("throws on fractional page number", () => {
90+
expect(() => parsePageRange("1.5", 20)).toThrow("Invalid page number");
91+
});
92+
93+
it("throws on fractional page number in a comma-separated list", () => {
94+
expect(() => parsePageRange("1,1.5", 20)).toThrow("Invalid page number");
95+
});
96+
8997
it("handles empty parts gracefully", () => {
9098
expect(parsePageRange("1,,3", 20)).toEqual([1, 3]);
9199
});

src/agents/tools/pdf-tool.helpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export function parsePageRange(range: string, maxPages: number): number[] {
6666
}
6767
} else {
6868
const num = Number(part);
69-
if (!Number.isFinite(num) || num < 1) {
69+
if (!Number.isFinite(num) || !Number.isInteger(num) || num < 1) {
7070
throw new Error(`Invalid page number: "${part}"`);
7171
}
7272
if (num <= maxPages) {

0 commit comments

Comments
 (0)