⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 286117 in webkit


Ignore:
Timestamp:
Nov 22, 2021, 12:35:05 PM (5 years ago)
Author:
Jean-Yves Avenard
Message:

Remove unused getEOTHeader method in OpenTypeUtilities.cpp
https://bugs.webkit.org/show_bug.cgi?id=233411
rdar://85656827

Reviewed by Youenn Fablet.

No change in behaviour.

  • platform/graphics/opentype/OpenTypeUtilities.cpp:
  • platform/graphics/opentype/OpenTypeUtilities.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r286116 r286117  
     12021-11-22  Jean-Yves Avenard  <jya@apple.com>
     2
     3        Remove unused getEOTHeader method in OpenTypeUtilities.cpp
     4        https://bugs.webkit.org/show_bug.cgi?id=233411
     5        rdar://85656827
     6
     7        Reviewed by Youenn Fablet.
     8
     9        No change in behaviour.
     10
     11        * platform/graphics/opentype/OpenTypeUtilities.cpp:
     12        * platform/graphics/opentype/OpenTypeUtilities.h:
     13
    1142021-11-22  Chris Fleizach  <cfleizach@apple.com>
    215
  • trunk/Source/WebCore/platform/graphics/opentype/OpenTypeUtilities.cpp

    r278532 r286117  
    198198}
    199199
    200 bool getEOTHeader(SharedBuffer* fontData, EOTHeader& eotHeader, size_t& overlayDst, size_t& overlaySrc, size_t& overlayLength)
    201 {
    202     overlayDst = 0;
    203     overlaySrc = 0;
    204     overlayLength = 0;
    205 
    206     size_t dataLength = fontData->size();
    207     auto* data = fontData->data();
    208 
    209     EOTPrefix* prefix = eotHeader.prefix();
    210 
    211     prefix->fontDataSize = dataLength;
    212     prefix->version = 0x00020001;
    213     prefix->flags = 0;
    214 
    215     if (dataLength < offsetof(sfntHeader, tables))
    216         return false;
    217 
    218     const sfntHeader* sfnt = reinterpret_cast<const sfntHeader*>(data);
    219 
    220     if (dataLength < offsetof(sfntHeader, tables) + sfnt->numTables * sizeof(TableDirectoryEntry))
    221         return false;
    222 
    223     bool haveOS2 = false;
    224     bool haveHead = false;
    225     bool haveName = false;
    226 
    227     const BigEndianUShort* familyName = 0;
    228     unsigned short familyNameLength = 0;
    229     const BigEndianUShort* subfamilyName = 0;
    230     unsigned short subfamilyNameLength = 0;
    231     const BigEndianUShort* fullName = 0;
    232     unsigned short fullNameLength = 0;
    233     const BigEndianUShort* versionString = 0;
    234     unsigned short versionStringLength = 0;
    235 
    236     for (unsigned i = 0; i < sfnt->numTables; i++) {
    237         unsigned tableOffset = sfnt->tables[i].offset;
    238         unsigned tableLength = sfnt->tables[i].length;
    239 
    240         if (dataLength < tableOffset || dataLength < tableLength || dataLength < tableOffset + tableLength)
    241             return false;
    242 
    243         unsigned tableTag = sfnt->tables[i].tag;
    244         switch (tableTag) {
    245             case 'OS/2':
    246                 {
    247                     if (dataLength < tableOffset + sizeof(OS2Table))
    248                         return false;
    249 
    250                     haveOS2 = true;
    251                     const OS2Table* OS2 = reinterpret_cast<const OS2Table*>(data + tableOffset);
    252                     for (unsigned j = 0; j < 10; j++)
    253                         prefix->fontPANOSE[j] = OS2->panose[j];
    254                     prefix->italic = OS2->fsSelection & 0x01;
    255                     prefix->weight = OS2->weightClass;
    256                     // FIXME: Should use OS2->fsType, but some TrueType fonts set it to an over-restrictive value.
    257                     // Since ATS does not enforce this on Mac OS X, we do not enforce it either.
    258                     prefix->fsType = 0;           
    259                     for (unsigned j = 0; j < 4; j++)
    260                         prefix->unicodeRange[j] = OS2->unicodeRange[j];
    261                     for (unsigned j = 0; j < 2; j++)
    262                         prefix->codePageRange[j] = OS2->codePageRange[j];
    263                     break;
    264                 }
    265             case 'head':
    266                 {
    267                     if (dataLength < tableOffset + sizeof(headTable))
    268                         return false;
    269 
    270                     haveHead = true;
    271                     const headTable* head = reinterpret_cast<const headTable*>(data + tableOffset);
    272                     prefix->checkSumAdjustment = head->checkSumAdjustment;
    273                     break;
    274                 }
    275             case 'name':
    276                 {
    277                     if (dataLength < tableOffset + offsetof(nameTable, nameRecords))
    278                         return false;
    279 
    280                     haveName = true;
    281                     const nameTable* name = reinterpret_cast<const nameTable*>(data + tableOffset);
    282                     for (int j = 0; j < name->count; j++) {
    283                         if (dataLength < tableOffset + offsetof(nameTable, nameRecords) + (j + 1) * sizeof(nameRecord))
    284                             return false;
    285                         if (name->nameRecords[j].platformID == 3 && name->nameRecords[j].encodingID == 1 && name->nameRecords[j].languageID == 0x0409) {
    286                             if (dataLength < tableOffset + name->stringOffset + name->nameRecords[j].offset + name->nameRecords[j].length)
    287                                 return false;
    288 
    289                             unsigned short nameLength = name->nameRecords[j].length;
    290                             const BigEndianUShort* nameString = reinterpret_cast<const BigEndianUShort*>(data + tableOffset + name->stringOffset + name->nameRecords[j].offset);
    291                            
    292                             switch (name->nameRecords[j].nameID) {
    293                                 case 1:
    294                                     familyNameLength = nameLength;
    295                                     familyName = nameString;
    296                                     break;
    297                                 case 2:
    298                                     subfamilyNameLength = nameLength;
    299                                     subfamilyName = nameString;
    300                                     break;
    301                                 case 4:
    302                                     fullNameLength = nameLength;
    303                                     fullName = nameString;
    304                                     break;
    305                                 case 5:
    306                                     versionStringLength = nameLength;
    307                                     versionString = nameString;
    308                                     break;
    309                                 default:
    310                                     break;
    311                             }
    312                         }
    313                     }
    314                     break;
    315                 }
    316             default:
    317                 break;
    318         }
    319         if (haveOS2 && haveHead && haveName)
    320             break;
    321     }
    322 
    323     prefix->charset = DEFAULT_CHARSET;
    324     prefix->magicNumber = 0x504c;
    325     prefix->reserved[0] = 0;
    326     prefix->reserved[1] = 0;
    327     prefix->reserved[2] = 0;
    328     prefix->reserved[3] = 0;
    329     prefix->padding1 = 0;
    330 
    331     eotHeader.appendBigEndianString(familyName, familyNameLength);
    332     eotHeader.appendBigEndianString(subfamilyName, subfamilyNameLength);
    333     eotHeader.appendBigEndianString(versionString, versionStringLength);
    334 
    335     // If possible, ensure that the family name is a prefix of the full name.
    336     if (fullNameLength >= familyNameLength && memcmp(familyName, fullName, familyNameLength)) {
    337         overlaySrc = reinterpret_cast<const uint8_t*>(fullName) - data;
    338         overlayDst = reinterpret_cast<const uint8_t*>(familyName) - data;
    339         overlayLength = familyNameLength;
    340     }
    341     eotHeader.appendBigEndianString(fullName, fullNameLength);
    342 
    343     eotHeader.appendPaddingShort();
    344     eotHeader.updateEOTSize(fontData->size());
    345 
    346     return true;
    347 }
    348 
    349200// adds fontName to the font table in fontData, and writes the new font table to rewrittenFontTable
    350201// returns the size of the name table (which is used by renameAndActivateFont), or 0 on early abort
  • trunk/Source/WebCore/platform/graphics/opentype/OpenTypeUtilities.h

    r278532 r286117  
    5555};
    5656
    57 bool getEOTHeader(SharedBuffer* fontData, EOTHeader& eotHeader, size_t& overlayDst, size_t& overlaySrc, size_t& overlayLength);
    5857bool renameFont(const SharedBuffer&, const String&, Vector<uint8_t>&);
    5958RefPtr<FontMemoryResource> renameAndActivateFont(const SharedBuffer&, const String&);
Note: See TracChangeset for help on using the changeset viewer.