diff options
Diffstat (limited to 'src/sfnt/SkOTTable_name.cpp')
-rw-r--r-- | src/sfnt/SkOTTable_name.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/sfnt/SkOTTable_name.cpp b/src/sfnt/SkOTTable_name.cpp index e0440754ca..b536c0a115 100644 --- a/src/sfnt/SkOTTable_name.cpp +++ b/src/sfnt/SkOTTable_name.cpp @@ -451,6 +451,8 @@ bool SkOTTableName::Iterator::next(SkOTTableName::Iterator::Record& record) { ++fIndex; } while (fType != -1 && nameRecord->nameID.fontSpecific != fType); + record.type = nameRecord->nameID.fontSpecific; + const uint16_t stringTableOffset = SkEndian_SwapBE16(fName.stringOffset); const char* stringTable = SkTAddOffset<const char>(&fName, stringTableOffset); @@ -460,20 +462,29 @@ bool SkOTTableName::Iterator::next(SkOTTableName::Iterator::Record& record) { const char* nameString = SkTAddOffset<const char>(stringTable, nameOffset); switch (nameRecord->platformID.value) { case SkOTTableName::Record::PlatformID::Windows: - SkASSERT(SkOTTableName::Record::EncodingID::Windows::UnicodeBMPUCS2 - == nameRecord->encodingID.windows.value - || SkOTTableName::Record::EncodingID::Windows::UnicodeUCS4 - == nameRecord->encodingID.windows.value - || SkOTTableName::Record::EncodingID::Windows::Symbol - == nameRecord->encodingID.windows.value); + if (SkOTTableName::Record::EncodingID::Windows::UnicodeBMPUCS2 + != nameRecord->encodingID.windows.value + && SkOTTableName::Record::EncodingID::Windows::UnicodeUCS4 + != nameRecord->encodingID.windows.value + && SkOTTableName::Record::EncodingID::Windows::Symbol + != nameRecord->encodingID.windows.value) + { + record.name.reset(); + break; + } case SkOTTableName::Record::PlatformID::Unicode: case SkOTTableName::Record::PlatformID::ISO: SkStringFromUTF16BE((const uint16_t*)nameString, nameLength, record.name); break; case SkOTTableName::Record::PlatformID::Macintosh: - SkASSERT(SkOTTableName::Record::EncodingID::Macintosh::Roman - == nameRecord->encodingID.macintosh.value); + // TODO: need better decoding, especially on Mac. + if (SkOTTableName::Record::EncodingID::Macintosh::Roman + != nameRecord->encodingID.macintosh.value) + { + record.name.reset(); + break; + } SkStringFromMacRoman((const uint8_t*)nameString, nameLength, record.name); break; |