| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/fpdfapi/fpdf_font/font_int.h" | 7 #include "core/fpdfapi/fpdf_font/font_int.h" |
| 8 | 8 |
| 9 #include "core/fpdfapi/fpdf_cmaps/cmap_int.h" | 9 #include "core/fpdfapi/fpdf_cmaps/cmap_int.h" |
| 10 #include "core/fpdfapi/fpdf_font/ttgsubtable.h" | 10 #include "core/fpdfapi/fpdf_font/ttgsubtable.h" |
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 } | 434 } |
| 435 } | 435 } |
| 436 m_CodeSeq++; | 436 m_CodeSeq++; |
| 437 } | 437 } |
| 438 } | 438 } |
| 439 m_LastWord = word; | 439 m_LastWord = word; |
| 440 } | 440 } |
| 441 | 441 |
| 442 // Static. | 442 // Static. |
| 443 uint32_t CPDF_CMapParser::CMap_GetCode(const CFX_ByteStringC& word) { | 443 uint32_t CPDF_CMapParser::CMap_GetCode(const CFX_ByteStringC& word) { |
| 444 int num = 0; | 444 pdfium::base::CheckedNumeric<uint32_t> num = 0; |
| 445 if (word.GetAt(0) == '<') { | 445 if (word.GetAt(0) == '<') { |
| 446 for (int i = 1; i < word.GetLength() && std::isxdigit(word.GetAt(i)); ++i) | 446 for (int i = 1; i < word.GetLength() && std::isxdigit(word.GetAt(i)); ++i) { |
| 447 num = num * 16 + FXSYS_toHexDigit(word.GetAt(i)); | 447 num = num * 16 + FXSYS_toHexDigit(word.GetAt(i)); |
| 448 return num; | 448 if (!num.IsValid()) |
| 449 return 0; |
| 450 } |
| 451 return num.ValueOrDie(); |
| 449 } | 452 } |
| 450 | 453 |
| 451 for (int i = 0; i < word.GetLength() && std::isdigit(word.GetAt(i)); ++i) | 454 for (int i = 0; i < word.GetLength() && std::isdigit(word.GetAt(i)); ++i) { |
| 452 num = num * 10 + FXSYS_toDecimalDigit(static_cast<FX_WCHAR>(word.GetAt(i))); | 455 num = num * 10 + FXSYS_toDecimalDigit(static_cast<FX_WCHAR>(word.GetAt(i))); |
| 453 return num; | 456 if (!num.IsValid()) |
| 457 return 0; |
| 458 } |
| 459 return num.ValueOrDie(); |
| 454 } | 460 } |
| 455 | 461 |
| 456 // Static. | 462 // Static. |
| 457 bool CPDF_CMapParser::CMap_GetCodeRange(CMap_CodeRange& range, | 463 bool CPDF_CMapParser::CMap_GetCodeRange(CMap_CodeRange& range, |
| 458 const CFX_ByteStringC& first, | 464 const CFX_ByteStringC& first, |
| 459 const CFX_ByteStringC& second) { | 465 const CFX_ByteStringC& second) { |
| 460 if (first.GetLength() == 0 || first.GetAt(0) != '<') | 466 if (first.GetLength() == 0 || first.GetAt(0) != '<') |
| 461 return false; | 467 return false; |
| 462 | 468 |
| 463 int i; | 469 int i; |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 774 m_EmbeddedCount = pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count; | 780 m_EmbeddedCount = pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count; |
| 775 } | 781 } |
| 776 | 782 |
| 777 CIDSet CharsetFromOrdering(const CFX_ByteStringC& ordering) { | 783 CIDSet CharsetFromOrdering(const CFX_ByteStringC& ordering) { |
| 778 for (size_t charset = 1; charset < FX_ArraySize(g_CharsetNames); ++charset) { | 784 for (size_t charset = 1; charset < FX_ArraySize(g_CharsetNames); ++charset) { |
| 779 if (ordering == g_CharsetNames[charset]) | 785 if (ordering == g_CharsetNames[charset]) |
| 780 return CIDSetFromSizeT(charset); | 786 return CIDSetFromSizeT(charset); |
| 781 } | 787 } |
| 782 return CIDSET_UNKNOWN; | 788 return CIDSET_UNKNOWN; |
| 783 } | 789 } |
| OLD | NEW |