Changeset 286117 in webkit
- Timestamp:
- Nov 22, 2021, 12:35:05 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
platform/graphics/opentype/OpenTypeUtilities.cpp (modified) (1 diff)
-
platform/graphics/opentype/OpenTypeUtilities.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r286116 r286117 1 2021-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 1 14 2021-11-22 Chris Fleizach <cfleizach@apple.com> 2 15 -
trunk/Source/WebCore/platform/graphics/opentype/OpenTypeUtilities.cpp
r278532 r286117 198 198 } 199 199 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 349 200 // adds fontName to the font table in fontData, and writes the new font table to rewrittenFontTable 350 201 // 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 55 55 }; 56 56 57 bool getEOTHeader(SharedBuffer* fontData, EOTHeader& eotHeader, size_t& overlayDst, size_t& overlaySrc, size_t& overlayLength);58 57 bool renameFont(const SharedBuffer&, const String&, Vector<uint8_t>&); 59 58 RefPtr<FontMemoryResource> renameAndActivateFont(const SharedBuffer&, const String&);
Note:
See TracChangeset
for help on using the changeset viewer.