diff options
author | Ryan Harrison <rharrison@chromium.org> | 2017-09-01 11:14:18 -0400 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-09-01 15:26:31 +0000 |
commit | 57cb5447d68c01eddba0618c3a8fe450b180f917 (patch) | |
tree | 5f17dc4c02c331d81a005db179c4a2a9b51b7e46 /core/fpdfapi/font/cpdf_cmap.cpp | |
parent | ffb6ccf6a2699cbb2bfc925c96609fae5124f51f (diff) | |
download | pdfium-57cb5447d68c01eddba0618c3a8fe450b180f917.tar.xz |
Adjust loops in preperation for FX_STRSIZE int->size_t
Adjust loop conditions and behaviours in preperation for convering the
underlying type of FX_STRSIZE to size_t. These changes are not
dependent on the type switch occuring, so can be landed before hand.
BUG=pdfium:828
Change-Id: I5f950c99c10e5ef0836959e3b1dd2e09f8f5afc0
Reviewed-on: https://pdfium-review.googlesource.com/12750
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Diffstat (limited to 'core/fpdfapi/font/cpdf_cmap.cpp')
-rw-r--r-- | core/fpdfapi/font/cpdf_cmap.cpp | 46 |
1 files changed, 19 insertions, 27 deletions
diff --git a/core/fpdfapi/font/cpdf_cmap.cpp b/core/fpdfapi/font/cpdf_cmap.cpp index 7b88346d64..9e8c48bb27 100644 --- a/core/fpdfapi/font/cpdf_cmap.cpp +++ b/core/fpdfapi/font/cpdf_cmap.cpp @@ -184,48 +184,43 @@ const PredefinedCMap g_PredefinedCMaps[] = { int CheckFourByteCodeRange(uint8_t* codes, FX_STRSIZE size, const std::vector<CPDF_CMap::CodeRange>& ranges) { - int iSeg = pdfium::CollectionSize<int>(ranges) - 1; - while (iSeg >= 0) { - if (ranges[iSeg].m_CharSize < size) { - --iSeg; + for (size_t i = ranges.size(); i > 0; i--) { + size_t seg = i - 1; + if (ranges[seg].m_CharSize < size) continue; - } - int iChar = 0; + FX_STRSIZE iChar = 0; while (iChar < size) { - if (codes[iChar] < ranges[iSeg].m_Lower[iChar] || - codes[iChar] > ranges[iSeg].m_Upper[iChar]) { + if (codes[iChar] < ranges[seg].m_Lower[iChar] || + codes[iChar] > ranges[seg].m_Upper[iChar]) { break; } ++iChar; } - if (iChar == ranges[iSeg].m_CharSize) + if (iChar == ranges[seg].m_CharSize) return 2; if (iChar) - return (size == ranges[iSeg].m_CharSize) ? 2 : 1; - iSeg--; + return (size == ranges[seg].m_CharSize) ? 2 : 1; } return 0; } -int GetFourByteCharSizeImpl(uint32_t charcode, - const std::vector<CPDF_CMap::CodeRange>& ranges) { +size_t GetFourByteCharSizeImpl( + uint32_t charcode, + const std::vector<CPDF_CMap::CodeRange>& ranges) { if (ranges.empty()) return 1; uint8_t codes[4]; codes[0] = codes[1] = 0x00; - codes[2] = (uint8_t)(charcode >> 8 & 0xFF); - codes[3] = (uint8_t)charcode; - FX_STRSIZE offset = 0; - int size = 4; - for (int i = 0; i < 4; ++i) { - int iSeg = pdfium::CollectionSize<int>(ranges) - 1; - while (iSeg >= 0) { - if (ranges[iSeg].m_CharSize < size) { - --iSeg; + codes[2] = static_cast<uint8_t>(charcode >> 8 & 0xFF); + codes[3] = static_cast<uint8_t>(charcode); + for (FX_STRSIZE offset = 0; offset < 4; offset++) { + FX_STRSIZE size = 4 - offset; + for (size_t j = 0; j < ranges.size(); j++) { + size_t iSeg = (ranges.size() - 1) - j; + if (ranges[iSeg].m_CharSize < size) continue; - } - int iChar = 0; + FX_STRSIZE iChar = 0; while (iChar < size) { if (codes[offset + iChar] < ranges[iSeg].m_Lower[iChar] || codes[offset + iChar] > ranges[iSeg].m_Upper[iChar]) { @@ -235,10 +230,7 @@ int GetFourByteCharSizeImpl(uint32_t charcode, } if (iChar == ranges[iSeg].m_CharSize) return size; - --iSeg; } - --size; - ++offset; } return 1; } |