aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sfnt/SkOTTable_name.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sfnt/SkOTTable_name.cpp')
-rw-r--r--src/sfnt/SkOTTable_name.cpp27
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;