Index: core/src/fxge/ge/fx_ge_path.cpp |
diff --git a/core/src/fxge/ge/fx_ge_path.cpp b/core/src/fxge/ge/fx_ge_path.cpp |
index b96a2f1163acd3d9d49d7229f35de1258aa948da..51d5908a8119a4017d4da045fbd04a4ada536d78 100644 |
--- a/core/src/fxge/ge/fx_ge_path.cpp |
+++ b/core/src/fxge/ge/fx_ge_path.cpp |
@@ -4,8 +4,10 @@ |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
+#include "../../../../third_party/base/numerics/safe_math.h" |
#include "../../../include/fxcrt/fx_basic.h" |
#include "../../../include/fxge/fx_ge.h" |
+ |
CFX_ClipRgn::CFX_ClipRgn(int width, int height) |
{ |
m_Type = RectI; |
@@ -120,7 +122,7 @@ CFX_PathData::~CFX_PathData() |
FX_Free(m_pPoints); |
} |
} |
-FX_BOOL CFX_PathData::SetPointCount(int nPoints) |
+void CFX_PathData::SetPointCount(int nPoints) |
{ |
m_PointCount = nPoints; |
if (m_AllocCount < nPoints) { |
@@ -129,20 +131,13 @@ FX_BOOL CFX_PathData::SetPointCount(int nPoints) |
m_pPoints = NULL; |
} |
m_pPoints = FX_Alloc(FX_PATHPOINT, nPoints); |
- if (!m_pPoints) { |
- return FALSE; |
- } |
m_AllocCount = nPoints; |
} |
- return TRUE; |
} |
-FX_BOOL CFX_PathData::AllocPointCount(int nPoints) |
+void CFX_PathData::AllocPointCount(int nPoints) |
{ |
if (m_AllocCount < nPoints) { |
FX_PATHPOINT* pNewBuf = FX_Alloc(FX_PATHPOINT, nPoints); |
- if (!pNewBuf) { |
- return FALSE; |
- } |
if (m_PointCount) { |
FXSYS_memcpy32(pNewBuf, m_pPoints, m_PointCount * sizeof(FX_PATHPOINT)); |
} |
@@ -152,16 +147,11 @@ FX_BOOL CFX_PathData::AllocPointCount(int nPoints) |
m_pPoints = pNewBuf; |
m_AllocCount = nPoints; |
} |
- return TRUE; |
} |
CFX_PathData::CFX_PathData(const CFX_PathData& src) |
{ |
- m_pPoints = NULL; |
m_PointCount = m_AllocCount = src.m_PointCount; |
m_pPoints = FX_Alloc(FX_PATHPOINT, src.m_PointCount); |
- if (!m_pPoints) { |
- return; |
- } |
FXSYS_memcpy32(m_pPoints, src.m_pPoints, sizeof(FX_PATHPOINT) * m_PointCount); |
} |
void CFX_PathData::TrimPoints(int nPoints) |
@@ -171,29 +161,24 @@ void CFX_PathData::TrimPoints(int nPoints) |
} |
SetPointCount(nPoints); |
} |
-FX_BOOL CFX_PathData::AddPointCount(int addPoints) |
+void CFX_PathData::AddPointCount(int addPoints) |
{ |
- int new_count = m_PointCount + addPoints; |
- if (!AllocPointCount(new_count)) { |
- return FALSE; |
- } |
+ pdfium::base::CheckedNumeric<int> safe_new_count = m_PointCount; |
+ safe_new_count += addPoints; |
+ int new_count = safe_new_count.ValueOrDie(); |
+ AllocPointCount(new_count); |
m_PointCount = new_count; |
- return TRUE; |
} |
-FX_BOOL CFX_PathData::Append(const CFX_PathData* pSrc, const CFX_AffineMatrix* pMatrix) |
+void CFX_PathData::Append(const CFX_PathData* pSrc, const CFX_AffineMatrix* pMatrix) |
{ |
int old_count = m_PointCount; |
- if (!AddPointCount(pSrc->m_PointCount)) { |
- return FALSE; |
- } |
+ AddPointCount(pSrc->m_PointCount); |
FXSYS_memcpy32(m_pPoints + old_count, pSrc->m_pPoints, pSrc->m_PointCount * sizeof(FX_PATHPOINT)); |
- if (pMatrix == NULL) { |
- return TRUE; |
- } |
- for (int i = 0; i < pSrc->m_PointCount; i ++) { |
- pMatrix->Transform(m_pPoints[old_count + i].m_PointX, m_pPoints[old_count + i].m_PointY); |
+ if (pMatrix) { |
+ for (int i = 0; i < pSrc->m_PointCount; i ++) { |
+ pMatrix->Transform(m_pPoints[old_count + i].m_PointX, m_pPoints[old_count + i].m_PointY); |
+ } |
} |
- return TRUE; |
} |
void CFX_PathData::SetPoint(int index, FX_FLOAT x, FX_FLOAT y, int flag) |
{ |
@@ -202,12 +187,10 @@ void CFX_PathData::SetPoint(int index, FX_FLOAT x, FX_FLOAT y, int flag) |
m_pPoints[index].m_PointY = y; |
m_pPoints[index].m_Flag = flag; |
} |
-FX_BOOL CFX_PathData::AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top) |
+void CFX_PathData::AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top) |
{ |
int old_count = m_PointCount; |
- if (!AddPointCount(5)) { |
- return FALSE; |
- } |
+ AddPointCount(5); |
FX_PATHPOINT* pPoints = m_pPoints + old_count; |
pPoints[0].m_PointX = pPoints[1].m_PointX = pPoints[4].m_PointX = left; |
pPoints[2].m_PointX = pPoints[3].m_PointX = right; |
@@ -216,7 +199,6 @@ FX_BOOL CFX_PathData::AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, |
pPoints[0].m_Flag = FXPT_MOVETO; |
pPoints[1].m_Flag = pPoints[2].m_Flag = pPoints[3].m_Flag = FXPT_LINETO; |
pPoints[4].m_Flag = FXPT_LINETO | FXPT_CLOSEFIGURE; |
- return TRUE; |
} |
CFX_FloatRect CFX_PathData::GetBoundingBox() const |
{ |
@@ -590,13 +572,10 @@ FX_BOOL CFX_PathData::IsRect(const CFX_AffineMatrix* pMatrix, CFX_FloatRect* pRe |
} |
return TRUE; |
} |
-FX_BOOL CFX_PathData::Copy(const CFX_PathData &src) |
+void CFX_PathData::Copy(const CFX_PathData &src) |
{ |
- if (!SetPointCount(src.m_PointCount)) { |
- return FALSE; |
- } |
+ SetPointCount(src.m_PointCount); |
FXSYS_memcpy32(m_pPoints, src.m_pPoints, sizeof(FX_PATHPOINT) * m_PointCount); |
- return TRUE; |
} |
CFX_GraphStateData::CFX_GraphStateData() |
{ |
@@ -627,9 +606,6 @@ void CFX_GraphStateData::Copy(const CFX_GraphStateData& src) |
m_LineWidth = src.m_LineWidth; |
if (m_DashCount) { |
m_DashArray = FX_Alloc(FX_FLOAT, m_DashCount); |
- if (!m_DashArray) { |
- return; |
- } |
FXSYS_memcpy32(m_DashArray, src.m_DashArray, m_DashCount * sizeof(FX_FLOAT)); |
} |
} |