diff --git a/src/fonts.js b/src/fonts.js index 0f9b6f9d0..7b09aa8ca 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -3321,7 +3321,9 @@ var Type2CFF = (function Type2CFFClosure() { parse: function cff_parse() { var header = this.parseHeader(); var properties = this.properties; + var nameIndex = this.parseIndex(header.endPos); + this.sanitizeName(nameIndex); var dictIndex = this.parseIndex(nameIndex.endPos); if (dictIndex.length != 1) @@ -3690,6 +3692,19 @@ var Type2CFF = (function Type2CFFClosure() { } return dict; }, + sanitizeName: function cff_sanitizeName(nameIndex) { + // There should really only be one font, but loop to make sure. + for (var i = 0, ii = nameIndex.length; i < ii; ++i) { + var data = nameIndex.get(i).data; + var length = data.length; + if (length > 127) + warn('Font had name longer than 127 chars, will be rejected.'); + // Only certain chars are permitted in the font name. Set them all to + // 'A' to avoid being rejected. + for (var j = 0; j < length; ++j) + data[j] = 65; + } + }, getStrings: function cff_getStrings(stringIndex) { function bytesToString(bytesArray) { var str = ''; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index e0926492b..9460cfbec 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -24,3 +24,4 @@ !type4psfunc.pdf !S2.pdf !zerowidthline.pdf +!issue925.pdf diff --git a/test/pdfs/issue925.pdf b/test/pdfs/issue925.pdf new file mode 100755 index 000000000..16329cbef Binary files /dev/null and b/test/pdfs/issue925.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index e09f16da9..e9aebdc90 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -460,6 +460,13 @@ "link": true, "type": "eq" }, + { "id": "issue925", + "file": "pdfs/issue925.pdf", + "md5": "f58fe943090aff89dcc8e771bc0db4c2", + "rounds": 1, + "link": true, + "type": "eq" + }, { "id": "issue1133", "file": "pdfs/issue1133.pdf", "md5": "d1b61580cb100e3df93d33703af1773a",