Change CPDF_Font::GetNextChar()'s in-out parameter to pass by pointer.
Instead of passing by non-const reference. Adjust the override in
CPDF_CIDFont and CPDF_CMap::GetNextChar() as well.
Change-Id: I0ee6dc21077101cbeeb0e334498075fc463a2d65
Reviewed-on: https://pdfium-review.googlesource.com/39492
Reviewed-by: Nicolás Peña Moreno <npm@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index b25b728..b73e0b8 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -736,8 +736,8 @@
}
uint32_t CPDF_CIDFont::GetNextChar(const ByteStringView& pString,
- size_t& offset) const {
- return m_pCMap->GetNextChar(pString, offset);
+ size_t* pOffset) const {
+ return m_pCMap->GetNextChar(pString, pOffset);
}
int CPDF_CIDFont::GetCharSize(uint32_t charcode) const {
diff --git a/core/fpdfapi/font/cpdf_cidfont.h b/core/fpdfapi/font/cpdf_cidfont.h
index 43c1184..ab074fb 100644
--- a/core/fpdfapi/font/cpdf_cidfont.h
+++ b/core/fpdfapi/font/cpdf_cidfont.h
@@ -47,7 +47,7 @@
uint32_t GetCharWidthF(uint32_t charcode) override;
FX_RECT GetCharBBox(uint32_t charcode) override;
uint32_t GetNextChar(const ByteStringView& pString,
- size_t& offset) const override;
+ size_t* pOffset) const override;
size_t CountChar(const ByteStringView& pString) const override;
int AppendChar(char* str, uint32_t charcode) const override;
bool IsVertWriting() const override;
diff --git a/core/fpdfapi/font/cpdf_cmap.cpp b/core/fpdfapi/font/cpdf_cmap.cpp
index f3ef829..ee8f264 100644
--- a/core/fpdfapi/font/cpdf_cmap.cpp
+++ b/core/fpdfapi/font/cpdf_cmap.cpp
@@ -338,7 +338,8 @@
}
uint32_t CPDF_CMap::GetNextChar(const ByteStringView& pString,
- size_t& offset) const {
+ size_t* pOffset) const {
+ size_t& offset = *pOffset;
auto pBytes = pString.span();
switch (m_CodingScheme) {
case OneByte: {
@@ -422,7 +423,7 @@
size_t count = 0;
size_t offset = 0;
while (offset < pString.GetLength()) {
- GetNextChar(pString, offset);
+ GetNextChar(pString, &offset);
count++;
}
return count;
diff --git a/core/fpdfapi/font/cpdf_cmap.h b/core/fpdfapi/font/cpdf_cmap.h
index 781f0f9..b3c09d5 100644
--- a/core/fpdfapi/font/cpdf_cmap.h
+++ b/core/fpdfapi/font/cpdf_cmap.h
@@ -62,7 +62,7 @@
uint16_t CIDFromCharCode(uint32_t charcode) const;
int GetCharSize(uint32_t charcode) const;
- uint32_t GetNextChar(const ByteStringView& pString, size_t& offset) const;
+ uint32_t GetNextChar(const ByteStringView& pString, size_t* pOffset) const;
size_t CountChar(const ByteStringView& pString) const;
int AppendChar(char* str, uint32_t charcode) const;
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp
index a243ceb..f75f696 100644
--- a/core/fpdfapi/font/cpdf_font.cpp
+++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -275,7 +275,7 @@
size_t offset = 0;
uint32_t width = 0;
while (offset < pString.GetLength())
- width += GetCharWidthF(GetNextChar(pString, offset));
+ width += GetCharWidthF(GetNextChar(pString, &offset));
return width;
}
@@ -330,13 +330,13 @@
}
uint32_t CPDF_Font::GetNextChar(const ByteStringView& pString,
- size_t& offset) const {
+ size_t* pOffset) const {
if (pString.IsEmpty())
return 0;
- uint8_t ch = offset < pString.GetLength() ? pString[offset++]
- : pString[pString.GetLength() - 1];
- return static_cast<uint32_t>(ch);
+ size_t& offset = *pOffset;
+ return offset < pString.GetLength() ? pString[offset++]
+ : pString[pString.GetLength() - 1];
}
bool CPDF_Font::IsStandardFont() const {
diff --git a/core/fpdfapi/font/cpdf_font.h b/core/fpdfapi/font/cpdf_font.h
index 0174a67..f5d0bac 100644
--- a/core/fpdfapi/font/cpdf_font.h
+++ b/core/fpdfapi/font/cpdf_font.h
@@ -54,7 +54,7 @@
virtual bool IsVertWriting() const;
virtual bool IsUnicodeCompatible() const;
virtual uint32_t GetNextChar(const ByteStringView& pString,
- size_t& offset) const;
+ size_t* pOffset) const;
virtual size_t CountChar(const ByteStringView& pString) const;
virtual int AppendChar(char* buf, uint32_t charcode) const;
virtual int GlyphFromCharCode(uint32_t charcode, bool* pVertGlyph) = 0;
diff --git a/core/fpdfapi/page/cpdf_textobject.cpp b/core/fpdfapi/page/cpdf_textobject.cpp
index 9da96f5..84428fe 100644
--- a/core/fpdfapi/page/cpdf_textobject.cpp
+++ b/core/fpdfapi/page/cpdf_textobject.cpp
@@ -165,7 +165,7 @@
size_t offset = 0;
while (offset < segment.GetLength()) {
ASSERT(index < m_CharCodes.size());
- m_CharCodes[index++] = pFont->GetNextChar(segment, offset);
+ m_CharCodes[index++] = pFont->GetNextChar(segment, &offset);
}
if (i != nSegs - 1) {
m_CharPos[index - 1] = kernings[i];
diff --git a/core/fpdfapi/render/cpdf_textrenderer.cpp b/core/fpdfapi/render/cpdf_textrenderer.cpp
index 7aeddf0..dd25d03 100644
--- a/core/fpdfapi/render/cpdf_textrenderer.cpp
+++ b/core/fpdfapi/render/cpdf_textrenderer.cpp
@@ -94,7 +94,7 @@
positions.resize(nChars - 1);
float cur_pos = 0;
for (int i = 0; i < nChars; i++) {
- codes[i] = pFont->GetNextChar(str.AsStringView(), offset);
+ codes[i] = pFont->GetNextChar(str.AsStringView(), &offset);
if (i)
positions[i - 1] = cur_pos;
cur_pos += pFont->GetCharWidthF(codes[i]) * font_size / 1000;