From b37eb503e949dff638982aa07bc25c92f5908bc8 Mon Sep 17 00:00:00 2001 From: "ksakamoto@chromium.org" Date: Tue, 19 Nov 2013 07:21:22 +0000 Subject: [PATCH] Allowing post area names to be >32767. Some fonts that cover all of unicode require post name entries greater than 32767. While the standard strictly requires this limit. Common implementations support it (it was an artifact of 16-bit windows). Permitting this variance from the specification. Patch from bradnelson@. BUG=None TEST=test/test_{un,}malicious_fonts.sh, unifont.ttf passes validation Review URL:https://codereview.chromium.org/68173026/ --- src/post.cc | 7 +++---- test/BLACKLIST.txt | 4 ---- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/post.cc b/src/post.cc index 74ba4530..f4a0b0de 100644 --- a/src/post.cc +++ b/src/post.cc @@ -76,10 +76,9 @@ bool ots_post_parse(OpenTypeFile *file, const uint8_t *data, size_t length) { if (!table.ReadU16(&post->glyph_name_index[i])) { return OTS_FAILURE(); } - if (post->glyph_name_index[i] >= 32768) { - // Note: droid_arialuni.ttf fails this test. - return OTS_FAILURE(); // reserved area. - } + // Note: A strict interpretation of the specification requires name indexes + // are less than 32768. This, however, excludes fonts like unifont.ttf + // which cover all of unicode. } // Now we have an array of Pascal strings. We have to check that they are all diff --git a/test/BLACKLIST.txt b/test/BLACKLIST.txt index 094fd75b..f3cd2076 100644 --- a/test/BLACKLIST.txt +++ b/test/BLACKLIST.txt @@ -109,10 +109,6 @@ DroidSansFallback.ttf # Malformed GLYF table; The content of flags array and the lengths of xCoordinates, yCoordinates are inconsistent. DecoTypeNaskh.ttf -# Malformed POST table; A glyph index in the reserved area (>= 32768) is specified. -wqy-zenhei.ttf -unifont.ttf - # Malformed HMTX table; The table is too short. mona.ttf