// Copyright 2014 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #include #include "core/fxge/cfx_fontmapper.h" #include "core/fxge/systemfontinfo_iface.h" static ByteString GetStringFromTable(const uint8_t* string_ptr, uint32_t string_ptr_length, uint16_t offset, uint16_t length) { if (string_ptr_length < static_cast(offset + length)) { return ByteString(); } return ByteString(string_ptr + offset, length); } ByteString GetNameFromTT(const uint8_t* name_table, uint32_t name_table_size, uint32_t name_id) { if (!name_table || name_table_size < 6) { return ByteString(); } uint32_t name_count = GET_TT_SHORT(name_table + 2); uint32_t string_offset = GET_TT_SHORT(name_table + 4); // We will ignore the possibility of overlap of structures and // string table as if it's all corrupt there's not a lot we can do. if (name_table_size < string_offset) { return ByteString(); } const uint8_t* string_ptr = name_table + string_offset; uint32_t string_ptr_size = name_table_size - string_offset; name_table += 6; name_table_size -= 6; if (name_table_size < name_count * 12) { return ByteString(); } for (uint32_t i = 0; i < name_count; i++, name_table += 12) { if (GET_TT_SHORT(name_table + 6) == name_id && GET_TT_SHORT(name_table) == 1 && GET_TT_SHORT(name_table + 2) == 0) { return GetStringFromTable(string_ptr, string_ptr_size, GET_TT_SHORT(name_table + 10), GET_TT_SHORT(name_table + 8)); } } return ByteString(); } #ifdef PDF_ENABLE_XFA void* SystemFontInfoIface::MapFontByUnicode(uint32_t dwUnicode, int weight, bool bItalic, int pitch_family) { return nullptr; } #endif // PDF_ENABLE_XFA int SystemFontInfoIface::GetFaceIndex(void* hFont) { return 0; } #if _FX_OS_ == _FX_OS_ANDROID_ std::unique_ptr SystemFontInfoIface::CreateDefault( const char** pUnused) { return nullptr; } #endif