Commit ea063324 authored by Jonathan Kew's avatar Jonathan Kew
Browse files

Bug 1779205 - part 2 - Drop variation tables entirely during sanitization if...

Bug 1779205 - part 2 - Drop variation tables entirely during sanitization if we don't support variations on the current platform. r=gfx-reviewers,aosmond

Differential Revision: https://phabricator.services.mozilla.com/D153444
parent 6367858f
Loading
Loading
Loading
Loading
+25 −15
Original line number Diff line number Diff line
@@ -107,24 +107,34 @@ class MOZ_STACK_CLASS gfxOTSContext : public ots::OTSContext {
    // and possibly OTL and Variation tables (depending on prefs)
    if ((!mCheckOTLTables && (aTag == TRUETYPE_TAG('G', 'D', 'E', 'F') ||
                              aTag == TRUETYPE_TAG('G', 'P', 'O', 'S') ||
                              aTag == TRUETYPE_TAG('G', 'S', 'U', 'B'))) ||
        (!mCheckVariationTables &&
         (aTag == TRUETYPE_TAG('a', 'v', 'a', 'r') ||
                              aTag == TRUETYPE_TAG('G', 'S', 'U', 'B')))) {
      return ots::TABLE_ACTION_PASSTHRU;
    }
    if (aTag == TRUETYPE_TAG('S', 'V', 'G', ' ') ||
        aTag == TRUETYPE_TAG('C', 'O', 'L', 'R') ||
        aTag == TRUETYPE_TAG('C', 'P', 'A', 'L')) {
      return ots::TABLE_ACTION_PASSTHRU;
    }
    if (mKeepColorBitmaps && (aTag == TRUETYPE_TAG('C', 'B', 'D', 'T') ||
                              aTag == TRUETYPE_TAG('C', 'B', 'L', 'C'))) {
      return ots::TABLE_ACTION_PASSTHRU;
    }
    auto isVariationTable = [](uint32_t aTag) -> bool {
      return aTag == TRUETYPE_TAG('a', 'v', 'a', 'r') ||
             aTag == TRUETYPE_TAG('c', 'v', 'a', 'r') ||
             aTag == TRUETYPE_TAG('f', 'v', 'a', 'r') ||
             aTag == TRUETYPE_TAG('g', 'v', 'a', 'r') ||
             aTag == TRUETYPE_TAG('H', 'V', 'A', 'R') ||
             aTag == TRUETYPE_TAG('M', 'V', 'A', 'R') ||
             aTag == TRUETYPE_TAG('S', 'T', 'A', 'T') ||
          aTag == TRUETYPE_TAG('V', 'V', 'A', 'R'))) ||
        aTag == TRUETYPE_TAG('S', 'V', 'G', ' ') ||
        aTag == TRUETYPE_TAG('C', 'O', 'L', 'R') ||
        aTag == TRUETYPE_TAG('C', 'P', 'A', 'L') ||
        (mKeepColorBitmaps && (aTag == TRUETYPE_TAG('C', 'B', 'D', 'T') ||
                               aTag == TRUETYPE_TAG('C', 'B', 'L', 'C'))) ||
        false) {
             aTag == TRUETYPE_TAG('V', 'V', 'A', 'R');
    };
    if (!mCheckVariationTables && isVariationTable(aTag)) {
      return ots::TABLE_ACTION_PASSTHRU;
    }
    if (!gfxPlatform::HasVariationFontSupport() && isVariationTable(aTag)) {
      return ots::TABLE_ACTION_DROP;
    }
    return ots::TABLE_ACTION_DEFAULT;
  }