summaryrefslogtreecommitdiff
path: root/core/fpdfapi/font
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/font')
-rw-r--r--core/fpdfapi/font/cpdf_cidfont.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index 7d14a9ea0a..4c378f7598 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -7,6 +7,7 @@
#include "core/fpdfapi/font/cpdf_cidfont.h"
#include <algorithm>
+#include <limits>
#include <vector>
#include "core/fpdfapi/cmaps/cmap_int.h"
@@ -781,8 +782,8 @@ void CPDF_CIDFont::LoadMetricsArray(CPDF_Array* pArray,
int nElements) {
int width_status = 0;
int iCurElement = 0;
- int first_code = 0;
- int last_code = 0;
+ uint32_t first_code = 0;
+ uint32_t last_code = 0;
for (size_t i = 0; i < pArray->GetCount(); i++) {
CPDF_Object* pObj = pArray->GetDirectObjectAt(i);
if (!pObj)
@@ -791,6 +792,11 @@ void CPDF_CIDFont::LoadMetricsArray(CPDF_Array* pArray,
if (CPDF_Array* pObjArray = pObj->AsArray()) {
if (width_status != 1)
return;
+ if (first_code >
+ std::numeric_limits<uint32_t>::max() - pObjArray->GetCount()) {
+ width_status = 0;
+ continue;
+ }
for (size_t j = 0; j < pObjArray->GetCount(); j += nElements) {
result->push_back(first_code);