From 896e390285f69e245161b5dac2e60ac86feb3827 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 6 Jan 2016 02:07:21 +0100 Subject: [PATCH] Check that CIDFontType0 fonts does not actually contain OpenType font files (issue 6782) *This patch follows a similar idea as PR 5756.* The patch is based on the nice debugging done by Brendan in the referenced issue 6782. A better way to handle this, and similar issues, would probably be to completely ignore what the PDF file claims about font type/subtype, and just check the actual data. But until that kind of rewrite happens, this patch should help. Fixes 6782. --- src/core/fonts.js | 14 +++++++++++++- test/pdfs/.gitignore | 1 + test/pdfs/issue6782.pdf | Bin 0 -> 23181 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 test/pdfs/issue6782.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index 95ee7fdb8..cdb08c74b 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -2666,7 +2666,14 @@ var Font = (function FontClosure() { } // Some CIDFontType0C fonts by mistake claim CIDFontType0. if (type === 'CIDFontType0') { - subtype = isType1File(file) ? 'CIDFontType0' : 'CIDFontType0C'; + if (isType1File(file)) { + subtype = 'CIDFontType0'; + } else if (isOpenTypeFile(file)) { + // Sometimes the type/subtype can be a complete lie (see issue6782.pdf). + type = subtype = 'OpenType'; + } else { + subtype = 'CIDFontType0C'; + } } var data; @@ -2750,6 +2757,11 @@ var Font = (function FontClosure() { return readUint32(header, 0) === 0x00010000; } + function isOpenTypeFile(file) { + var header = file.peekBytes(4); + return bytesToString(header) === 'OTTO'; + } + function isType1File(file) { var header = file.peekBytes(2); // All Type1 font programs must begin with the comment '%!' (0x25 + 0x21). diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 74aa95331..e6b2b9c2e 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -14,6 +14,7 @@ !issue5946.pdf !issue5972.pdf !issue5874.pdf +!issue6782.pdf !filled-background.pdf !ArabicCIDTrueType.pdf !ThuluthFeatures.pdf diff --git a/test/pdfs/issue6782.pdf b/test/pdfs/issue6782.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d86458e8953964f8a701b584f99a30f20a1c48e1 GIT binary patch literal 23181 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