From 505f15f2219251b440830e6c80bd42d29ef3190c Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Tue, 1 Mar 2016 21:39:33 +0100 Subject: [PATCH] Avoid accidentally getting the entire font file in `readNameTable` (issue 7020) In the PDF file in question, some of the 'name' table entries have `record.length === 0`. This becomes problematic in the non-unicode case, since `font.getBytes(0)` will fetch the *entire* stream. Given that OTS rejects 'name' entries larger than `2^16`, this thus explain the sanitizer errors. Fixes 7020. --- src/core/fonts.js | 3 +++ test/pdfs/.gitignore | 1 + test/pdfs/issue7020.pdf | Bin 0 -> 17014 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 11 insertions(+) create mode 100644 test/pdfs/issue7020.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index 0c511f8aa..5017d1b93 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -1832,6 +1832,9 @@ var Font = (function FontClosure() { } for (i = 0, ii = records.length; i < ii; i++) { var record = records[i]; + if (record.length <= 0) { + continue; // Nothing to process, ignoring. + } var pos = start + stringsStart + record.offset; if (pos + record.length > end) { continue; // outside of name table, ignoring diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index a771174a0..106de2ce3 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -19,6 +19,7 @@ !issue5874.pdf !issue6782.pdf !issue6961.pdf +!issue7020.pdf !filled-background.pdf !ArabicCIDTrueType.pdf !ThuluthFeatures.pdf diff --git a/test/pdfs/issue7020.pdf b/test/pdfs/issue7020.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e9ee3bc10b57522f76be7e16c8b3f7da0a77cd56 GIT binary patch literal 17014 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