summaryrefslogtreecommitdiff
path: root/core/fpdfapi/cmaps
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2018-07-25 23:25:55 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-07-25 23:25:55 +0000
commit11a6becb837a16972ffda8f94c8fb69ae100f3f4 (patch)
tree38f7e3508f1ef221eabd62b14665e78437da2d8f /core/fpdfapi/cmaps
parent91b8302dec04ca4ddc1f91545d192350665580cf (diff)
downloadpdfium-11a6becb837a16972ffda8f94c8fb69ae100f3f4.tar.xz
Remove some ASSERT (and cast) in favor of checked cases.
Because it is a stronger pattern at runtime. These were found by essentially: grep -ni '\bassert\b.*type' Change-Id: I913d77139053e8980528597a6633e1859e5204c4 Reviewed-on: https://pdfium-review.googlesource.com/38890 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fpdfapi/cmaps')
-rw-r--r--core/fpdfapi/cmaps/fpdf_cmaps.cpp92
1 files changed, 55 insertions, 37 deletions
diff --git a/core/fpdfapi/cmaps/fpdf_cmaps.cpp b/core/fpdfapi/cmaps/fpdf_cmaps.cpp
index ad1091910c..630942bde7 100644
--- a/core/fpdfapi/cmaps/fpdf_cmaps.cpp
+++ b/core/fpdfapi/cmaps/fpdf_cmaps.cpp
@@ -74,31 +74,40 @@ uint16_t FPDFAPI_CIDFromCharCode(const FXCMAP_CMap* pMap, uint32_t charcode) {
return 0;
}
- while (pMap) {
- if (!pMap->m_pWordMap)
- return 0;
- if (pMap->m_WordMapType == FXCMAP_CMap::Single) {
- const auto* begin = reinterpret_cast<const SingleCmap*>(pMap->m_pWordMap);
- const auto* end = begin + pMap->m_WordCount;
- const auto* found = std::lower_bound(
- begin, end, loword, [](const SingleCmap& element, uint16_t code) {
- return element.code < code;
- });
- if (found != end && found->code == loword)
- return found->cid;
- } else {
- ASSERT(pMap->m_WordMapType == FXCMAP_CMap::Range);
- const auto* begin = reinterpret_cast<const RangeCmap*>(pMap->m_pWordMap);
- const auto* end = begin + pMap->m_WordCount;
- const auto* found = std::lower_bound(
- begin, end, loword, [](const RangeCmap& element, uint16_t code) {
- return element.high < code;
- });
- if (found != end && loword >= found->low && loword <= found->high)
- return found->cid + loword - found->low;
+ while (pMap && pMap->m_pWordMap) {
+ switch (pMap->m_WordMapType) {
+ case FXCMAP_CMap::Single: {
+ const auto* begin =
+ reinterpret_cast<const SingleCmap*>(pMap->m_pWordMap);
+ const auto* end = begin + pMap->m_WordCount;
+ const auto* found = std::lower_bound(
+ begin, end, loword, [](const SingleCmap& element, uint16_t code) {
+ return element.code < code;
+ });
+ if (found != end && found->code == loword)
+ return found->cid;
+ break;
+ }
+ case FXCMAP_CMap::Range: {
+ const auto* begin =
+ reinterpret_cast<const RangeCmap*>(pMap->m_pWordMap);
+ const auto* end = begin + pMap->m_WordCount;
+ const auto* found = std::lower_bound(
+ begin, end, loword, [](const RangeCmap& element, uint16_t code) {
+ return element.high < code;
+ });
+ if (found != end && loword >= found->low && loword <= found->high)
+ return found->cid + loword - found->low;
+ break;
+ }
+ default: {
+ NOTREACHED();
+ break;
+ }
}
pMap = FindNextCMap(pMap);
}
+
return 0;
}
@@ -110,22 +119,31 @@ uint32_t FPDFAPI_CharCodeFromCID(const FXCMAP_CMap* pMap, uint16_t cid) {
// second while loop.)
ASSERT(pMap);
while (pMap) {
- if (pMap->m_WordMapType == FXCMAP_CMap::Single) {
- const auto* pCur = reinterpret_cast<const SingleCmap*>(pMap->m_pWordMap);
- const auto* pEnd = pCur + pMap->m_WordCount;
- while (pCur < pEnd) {
- if (pCur->cid == cid)
- return pCur->code;
- ++pCur;
+ switch (pMap->m_WordMapType) {
+ case FXCMAP_CMap::Single: {
+ const auto* pCur =
+ reinterpret_cast<const SingleCmap*>(pMap->m_pWordMap);
+ const auto* pEnd = pCur + pMap->m_WordCount;
+ while (pCur < pEnd) {
+ if (pCur->cid == cid)
+ return pCur->code;
+ ++pCur;
+ }
+ break;
+ }
+ case FXCMAP_CMap::Range: {
+ const auto* pCur = reinterpret_cast<const RangeCmap*>(pMap->m_pWordMap);
+ const auto* pEnd = pCur + pMap->m_WordCount;
+ while (pCur < pEnd) {
+ if (cid >= pCur->cid && cid <= pCur->cid + pCur->high - pCur->low)
+ return pCur->low + cid - pCur->cid;
+ ++pCur;
+ }
+ break;
}
- } else {
- ASSERT(pMap->m_WordMapType == FXCMAP_CMap::Range);
- const auto* pCur = reinterpret_cast<const RangeCmap*>(pMap->m_pWordMap);
- const auto* pEnd = pCur + pMap->m_WordCount;
- while (pCur < pEnd) {
- if (cid >= pCur->cid && cid <= pCur->cid + pCur->high - pCur->low)
- return pCur->low + cid - pCur->cid;
- ++pCur;
+ default: {
+ NOTREACHED();
+ break;
}
}
pMap = FindNextCMap(pMap);