diff --git a/.changeset/hip-rockets-punch.md b/.changeset/hip-rockets-punch.md new file mode 100644 index 000000000..a4bd4bf8c --- /dev/null +++ b/.changeset/hip-rockets-punch.md @@ -0,0 +1,6 @@ +--- +"@react-pdf/pdfkit": patch +"@react-pdf/render": patch +--- + +fix: clamp extreme number values to valid PDF range diff --git a/packages/pdfkit/src/object.js b/packages/pdfkit/src/object.js index 5e876c48e..7177de8a8 100644 --- a/packages/pdfkit/src/object.js +++ b/packages/pdfkit/src/object.js @@ -116,11 +116,9 @@ class PDFObject { } static number(n) { - if (n > -1e21 && n < 1e21) { - return Math.round(n * 1e6) / 1e6; - } - - throw new Error(`unsupported number: ${n}`); + // Clamp to valid PDF number range to prevent errors with extreme values + const clamped = Math.max(-1e21 + 1, Math.min(1e21 - 1, n)); + return Math.round(clamped * 1e6) / 1e6; } } diff --git a/packages/render/src/primitives/renderGlyphs.ts b/packages/render/src/primitives/renderGlyphs.ts index 46bfc9984..a07a62591 100644 --- a/packages/render/src/primitives/renderGlyphs.ts +++ b/packages/render/src/primitives/renderGlyphs.ts @@ -5,11 +5,9 @@ import { Context } from '../types'; import encodeGlyphs from '../operations/encodeGlyphs'; const number = (n: number) => { - if (n > -1e21 && n < 1e21) { - return Math.round(n * 1e6) / 1e6; - } - - throw new Error(`unsupported number: ${n}`); + // Clamp to valid PDF number range to prevent errors with extreme values + const clamped = Math.max(-1e21 + 1, Math.min(1e21 - 1, n)); + return Math.round(clamped * 1e6) / 1e6; }; const _renderGlyphs = (