summaryrefslogtreecommitdiff
path: root/fpdfsdk
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk')
-rw-r--r--fpdfsdk/fpdfedit_embeddertest.cpp4
-rw-r--r--fpdfsdk/fpdfedittext.cpp7
-rw-r--r--fpdfsdk/pwl/cpwl_edit_impl.cpp4
-rw-r--r--fpdfsdk/pwl/cpwl_edit_impl.h2
4 files changed, 11 insertions, 6 deletions
diff --git a/fpdfsdk/fpdfedit_embeddertest.cpp b/fpdfsdk/fpdfedit_embeddertest.cpp
index ee2fc7eb85..070c51e3b6 100644
--- a/fpdfsdk/fpdfedit_embeddertest.cpp
+++ b/fpdfsdk/fpdfedit_embeddertest.cpp
@@ -105,7 +105,7 @@ class FPDFEditEmbeddertest : public EmbedderTest {
int cnt = static_cast<int>(arr->GetCount());
size_t inner_idx = 0;
for (cur_cid = cid; cur_cid < cid + cnt; cur_cid++) {
- int width = arr->GetNumberAt(inner_idx++);
+ uint32_t width = arr->GetNumberAt(inner_idx++);
EXPECT_EQ(width, typed_font->GetCharWidthF(cur_cid)) << " at cid "
<< cur_cid;
}
@@ -116,7 +116,7 @@ class FPDFEditEmbeddertest : public EmbedderTest {
ASSERT_TRUE(next->IsNumber());
int last_cid = next->AsNumber()->GetInteger();
ASSERT_FALSE(++idx == widths_array->GetCount());
- int width = widths_array->GetNumberAt(idx);
+ uint32_t width = widths_array->GetNumberAt(idx);
for (cur_cid = cid; cur_cid <= last_cid; cur_cid++) {
EXPECT_EQ(width, typed_font->GetCharWidthF(cur_cid)) << " at cid "
<< cur_cid;
diff --git a/fpdfsdk/fpdfedittext.cpp b/fpdfsdk/fpdfedittext.cpp
index 22c6266ec1..7bbb6a857c 100644
--- a/fpdfsdk/fpdfedittext.cpp
+++ b/fpdfsdk/fpdfedittext.cpp
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <algorithm>
+#include <limits>
#include <map>
#include <memory>
#include <utility>
@@ -259,7 +261,10 @@ void* LoadSimpleFont(CPDF_Document* pDoc,
fontDict->SetNewFor<CPDF_Number>("FirstChar", static_cast<int>(currentChar));
CPDF_Array* widthsArray = pDoc->NewIndirect<CPDF_Array>();
while (true) {
- widthsArray->AddNew<CPDF_Number>(pFont->GetGlyphWidth(glyphIndex));
+ uint32_t width =
+ std::min(pFont->GetGlyphWidth(glyphIndex),
+ static_cast<uint32_t>(std::numeric_limits<int>::max()));
+ widthsArray->AddNew<CPDF_Number>(static_cast<int>(width));
uint32_t nextChar =
FXFT_Get_Next_Char(pFont->GetFace(), currentChar, &glyphIndex);
// Simple fonts have 1-byte charcodes only.
diff --git a/fpdfsdk/pwl/cpwl_edit_impl.cpp b/fpdfsdk/pwl/cpwl_edit_impl.cpp
index 1881ba2c28..91496f0c8d 100644
--- a/fpdfsdk/pwl/cpwl_edit_impl.cpp
+++ b/fpdfsdk/pwl/cpwl_edit_impl.cpp
@@ -125,8 +125,8 @@ IPVT_FontMap* CPWL_EditImpl_Provider::GetFontMap() const {
return m_pFontMap;
}
-int32_t CPWL_EditImpl_Provider::GetCharWidth(int32_t nFontIndex,
- uint16_t word) {
+uint32_t CPWL_EditImpl_Provider::GetCharWidth(int32_t nFontIndex,
+ uint16_t word) {
if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) {
uint32_t charcode = word;
diff --git a/fpdfsdk/pwl/cpwl_edit_impl.h b/fpdfsdk/pwl/cpwl_edit_impl.h
index 38477db427..7f4d3e108b 100644
--- a/fpdfsdk/pwl/cpwl_edit_impl.h
+++ b/fpdfsdk/pwl/cpwl_edit_impl.h
@@ -423,7 +423,7 @@ class CPWL_EditImpl_Provider : public CPDF_VariableText::Provider {
IPVT_FontMap* GetFontMap() const;
// CPDF_VariableText::Provider:
- int32_t GetCharWidth(int32_t nFontIndex, uint16_t word) override;
+ uint32_t GetCharWidth(int32_t nFontIndex, uint16_t word) override;
int32_t GetTypeAscent(int32_t nFontIndex) override;
int32_t GetTypeDescent(int32_t nFontIndex) override;
int32_t GetWordFontIndex(uint16_t word,