diff --git a/src/core/evaluator.js b/src/core/evaluator.js index fb9e2483a..0d4291258 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -3788,6 +3788,9 @@ class PartialEvaluator { firstChar, lastChar, toUnicode, + xHeight: 0, + capHeight: 0, + italicAngle: 0, isType3Font, }; const widths = dict.get("Widths"); @@ -3919,10 +3922,10 @@ class PartialEvaluator { bbox: descriptor.getArray("FontBBox") || dict.getArray("FontBBox"), ascent: descriptor.get("Ascent"), descent: descriptor.get("Descent"), - xHeight: descriptor.get("XHeight"), - capHeight: descriptor.get("CapHeight"), + xHeight: descriptor.get("XHeight") || 0, + capHeight: descriptor.get("CapHeight") || 0, flags: descriptor.get("Flags"), - italicAngle: descriptor.get("ItalicAngle"), + italicAngle: descriptor.get("ItalicAngle") || 0, isType3Font, cssFontInfo, scaleFactors: glyphScaleFactors, diff --git a/src/core/fonts.js b/src/core/fonts.js index b5445b551..1ab9cd398 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -257,10 +257,28 @@ function int32(b0, b1, b2, b3) { } function string16(value) { + if ( + typeof PDFJSDev === "undefined" || + PDFJSDev.test("!PRODUCTION || TESTING") + ) { + assert( + typeof value === "number" && Math.abs(value) < 2 ** 16, + `string16: Unexpected input "${value}".` + ); + } return String.fromCharCode((value >> 8) & 0xff, value & 0xff); } function safeString16(value) { + if ( + typeof PDFJSDev === "undefined" || + PDFJSDev.test("!PRODUCTION || TESTING") + ) { + assert( + typeof value === "number" && !Number.isNaN(value), + `safeString16: Unexpected input "${value}".` + ); + } // clamp value to the 16-bit int range if (value > 0x7fff) { value = 0x7fff; @@ -751,7 +769,7 @@ function createPostTable(properties) { string32(angle) + // italicAngle "\x00\x00" + // underlinePosition "\x00\x00" + // underlineThickness - string32(properties.fixedPitch) + // isFixedPitch + string32(properties.fixedPitch ? 1 : 0) + // isFixedPitch "\x00\x00\x00\x00" + // minMemType42 "\x00\x00\x00\x00" + // maxMemType42 "\x00\x00\x00\x00" + // minMemType1 diff --git a/src/shared/util.js b/src/shared/util.js index bf3c45c4a..f1a373acb 100644 --- a/src/shared/util.js +++ b/src/shared/util.js @@ -588,6 +588,15 @@ function arraysToBytes(arr) { } function string32(value) { + if ( + typeof PDFJSDev === "undefined" || + PDFJSDev.test("!PRODUCTION || TESTING") + ) { + assert( + typeof value === "number" && Math.abs(value) < 2 ** 32, + `string32: Unexpected input "${value}".` + ); + } return String.fromCharCode( (value >> 24) & 0xff, (value >> 16) & 0xff, diff --git a/test/font/font_fpgm_spec.js b/test/font/font_fpgm_spec.js index 7c748ed47..5c53827e6 100644 --- a/test/font/font_fpgm_spec.js +++ b/test/font/font_fpgm_spec.js @@ -23,6 +23,9 @@ describe("font_fpgm", function () { defaultEncoding: [], cMap, toUnicode: new ToUnicodeMap([]), + xHeight: 0, + capHeight: 0, + italicAngle: 0, }); const output = await ttx(font.data); diff --git a/test/font/font_os2_spec.js b/test/font/font_os2_spec.js index b344bc90b..fac47f84c 100644 --- a/test/font/font_os2_spec.js +++ b/test/font/font_os2_spec.js @@ -23,6 +23,9 @@ describe("font_post", function () { differences: [], defaultEncoding: [], toUnicode: new ToUnicodeMap([]), + xHeight: 0, + capHeight: 0, + italicAngle: 0, }); const output = await ttx(font.data); @@ -41,6 +44,9 @@ describe("font_post", function () { defaultEncoding: [], cMap, toUnicode: new ToUnicodeMap([]), + xHeight: 0, + capHeight: 0, + italicAngle: 0, }); const output = await ttx(font.data); diff --git a/test/font/font_post_spec.js b/test/font/font_post_spec.js index 6cb92705a..d00ddcdbe 100644 --- a/test/font/font_post_spec.js +++ b/test/font/font_post_spec.js @@ -31,6 +31,9 @@ describe("font_post", function () { defaultEncoding: [], cMap, toUnicode: new ToUnicodeMap([]), + xHeight: 0, + capHeight: 0, + italicAngle: 0, }); const output = await ttx(font.data); @@ -45,6 +48,9 @@ describe("font_post", function () { differences: [], defaultEncoding: [], toUnicode: new ToUnicodeMap([]), + xHeight: 0, + capHeight: 0, + italicAngle: 0, }); const output = await ttx(font.data); @@ -59,6 +65,9 @@ describe("font_post", function () { differences: [], defaultEncoding: [], toUnicode: new ToUnicodeMap([]), + xHeight: 0, + capHeight: 0, + italicAngle: 0, }); const output = await ttx(font.data);