From 42bb2b0737a3d8f78a39576516cb601b613566ce Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Mon, 24 Jun 2024 16:38:17 +0200 Subject: [PATCH] Fix the computation of unitsPerEm when the fontMatrix has some negative coefficients It's a follow-up of #18253. --- src/core/fonts.js | 4 ++-- test/pdfs/.gitignore | 1 + test/pdfs/bug1539074.1.pdf | Bin 0 -> 6015 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100755 test/pdfs/bug1539074.1.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index 7959f8ffc118d..52994267da462 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -799,7 +799,7 @@ function createOS2Table(properties, charstrings, override) { const unitsPerEm = override.unitsPerEm || (properties.fontMatrix - ? 1 / Math.max(...properties.fontMatrix.slice(0, 4)) + ? 1 / Math.max(...properties.fontMatrix.slice(0, 4).map(Math.abs)) : 1000); // if the font units differ to the PDF glyph space units @@ -3199,7 +3199,7 @@ class Font { } const unitsPerEm = properties.fontMatrix - ? 1 / Math.max(...properties.fontMatrix.slice(0, 4)) + ? 1 / Math.max(...properties.fontMatrix.slice(0, 4).map(Math.abs)) : 1000; const builder = new OpenTypeFileBuilder("\x4F\x54\x54\x4F"); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index a0991c7193413..2c6cad45937e6 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -650,3 +650,4 @@ !issue17998.pdf !pdfjs_wikipedia.pdf !bug1539074.pdf +!bug1539074.1.pdf diff --git a/test/pdfs/bug1539074.1.pdf b/test/pdfs/bug1539074.1.pdf new file mode 100755 index 0000000000000000000000000000000000000000..d99f1de37db051ba7d5379078b3dae9bc6a72332 GIT binary patch literal 6015 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 literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index 0882c41858296..87e2df8b487e6 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -10098,6 +10098,13 @@ "rounds": 1, "type": "eq" }, + { + "id": "bug1539074_1", + "file": "pdfs/bug1539074.1.pdf", + "md5": "d15c49142fda433323d3d35f2762cd33", + "rounds": 1, + "type": "eq" + }, { "id": "bug1903731", "file": "pdfs/bug1903731.pdf",