Remove struct CFX_CTTGSUBTable::TLangSysRecord Since only 1 field in this struct is actually used, replace the struct with just the field. Change ParseLangSys(), which handles the field, to return the data instead of using an out-parameter. Change-Id: Id20631b376ce7e724962355938ab43bda9006684 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/107431 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cfx_cttgsubtable.cpp b/core/fpdfapi/font/cfx_cttgsubtable.cpp index ae5a841..7726371 100644 --- a/core/fpdfapi/font/cfx_cttgsubtable.cpp +++ b/core/fpdfapi/font/cfx_cttgsubtable.cpp
@@ -33,7 +33,7 @@ for (const TScriptRecord& script : ScriptList) { for (const auto& record : script.LangSysRecords) { - for (uint16_t index : record.FeatureIndices) { + for (uint16_t index : record) { if (IsVerticalFeatureTag(FeatureList[index].FeatureTag)) m_featureSet.insert(index); } @@ -194,20 +194,22 @@ void CFX_CTTGSUBTable::ParseScript(FT_Bytes raw, TScriptRecord* rec) { FT_Bytes sp = raw; rec->DefaultLangSys = GetUInt16(sp); - rec->LangSysRecords = std::vector<TLangSysRecord>(GetUInt16(sp)); - for (auto& sysRecord : rec->LangSysRecords) { - sysRecord.LangSysTag = GetUInt32(sp); - ParseLangSys(&raw[GetUInt16(sp)], &sysRecord); + rec->LangSysRecords = std::vector<FeatureIndices>(GetUInt16(sp)); + for (auto& sys_record : rec->LangSysRecords) { + // Skip over "LangSysTag" field. + sp += 4; + sys_record = ParseLangSys(&raw[GetUInt16(sp)]); } } -void CFX_CTTGSUBTable::ParseLangSys(FT_Bytes raw, TLangSysRecord* rec) { - FT_Bytes sp = raw; - rec->LookupOrder = GetUInt16(sp); - rec->ReqFeatureIndex = GetUInt16(sp); - rec->FeatureIndices = DataVector<uint16_t>(GetUInt16(sp)); - for (auto& element : rec->FeatureIndices) +CFX_CTTGSUBTable::FeatureIndices CFX_CTTGSUBTable::ParseLangSys(FT_Bytes raw) { + // Skip over "LookupOrder" and "ReqFeatureIndex" fields. + FT_Bytes sp = raw + 4; + FeatureIndices result(GetUInt16(sp)); + for (auto& element : result) { element = GetUInt16(sp); + } + return result; } void CFX_CTTGSUBTable::ParseFeatureList(FT_Bytes raw) { @@ -315,10 +317,6 @@ return rec; } -CFX_CTTGSUBTable::TLangSysRecord::TLangSysRecord() = default; - -CFX_CTTGSUBTable::TLangSysRecord::~TLangSysRecord() = default; - CFX_CTTGSUBTable::TScriptRecord::TScriptRecord() = default; CFX_CTTGSUBTable::TScriptRecord::~TScriptRecord() = default;
diff --git a/core/fpdfapi/font/cfx_cttgsubtable.h b/core/fpdfapi/font/cfx_cttgsubtable.h index 0555333..6405c24 100644 --- a/core/fpdfapi/font/cfx_cttgsubtable.h +++ b/core/fpdfapi/font/cfx_cttgsubtable.h
@@ -25,15 +25,7 @@ uint32_t GetVerticalGlyph(uint32_t glyphnum) const; private: - struct TLangSysRecord { - TLangSysRecord(); - ~TLangSysRecord(); - - uint32_t LangSysTag = 0; - uint16_t LookupOrder = 0; - uint16_t ReqFeatureIndex = 0; - DataVector<uint16_t> FeatureIndices; - }; + using FeatureIndices = DataVector<uint16_t>; struct TScriptRecord { TScriptRecord(); @@ -41,7 +33,7 @@ uint32_t ScriptTag = 0; uint16_t DefaultLangSys = 0; - std::vector<TLangSysRecord> LangSysRecords; + std::vector<FeatureIndices> LangSysRecords; }; struct TFeatureRecord { @@ -125,7 +117,7 @@ bool Parse(FT_Bytes scriptlist, FT_Bytes featurelist, FT_Bytes lookuplist); void ParseScriptList(FT_Bytes raw); void ParseScript(FT_Bytes raw, TScriptRecord* rec); - void ParseLangSys(FT_Bytes raw, TLangSysRecord* rec); + FeatureIndices ParseLangSys(FT_Bytes raw); void ParseFeatureList(FT_Bytes raw); void ParseFeature(FT_Bytes raw, TFeatureRecord* rec); void ParseLookupList(FT_Bytes raw);