Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(503)

Side by Side Diff: core/src/fxge/ge/fx_ge_path.cpp

Issue 1135893008: Re-land: Remove FX_Alloc() null checks now that it can't return NULL. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/src/fxge/ge/fx_ge_fontmap.cpp ('k') | core/src/fxge/ge/fx_ge_ps.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "../../../../third_party/base/numerics/safe_math.h"
7 #include "../../../include/fxcrt/fx_basic.h" 8 #include "../../../include/fxcrt/fx_basic.h"
8 #include "../../../include/fxge/fx_ge.h" 9 #include "../../../include/fxge/fx_ge.h"
10
9 CFX_ClipRgn::CFX_ClipRgn(int width, int height) 11 CFX_ClipRgn::CFX_ClipRgn(int width, int height)
10 { 12 {
11 m_Type = RectI; 13 m_Type = RectI;
12 m_Box.left = m_Box.top = 0; 14 m_Box.left = m_Box.top = 0;
13 m_Box.right = width; 15 m_Box.right = width;
14 m_Box.bottom = height; 16 m_Box.bottom = height;
15 } 17 }
16 CFX_ClipRgn::CFX_ClipRgn(const FX_RECT& rect) 18 CFX_ClipRgn::CFX_ClipRgn(const FX_RECT& rect)
17 { 19 {
18 m_Type = RectI; 20 m_Type = RectI;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 { 115 {
114 m_PointCount = m_AllocCount = 0; 116 m_PointCount = m_AllocCount = 0;
115 m_pPoints = NULL; 117 m_pPoints = NULL;
116 } 118 }
117 CFX_PathData::~CFX_PathData() 119 CFX_PathData::~CFX_PathData()
118 { 120 {
119 if (m_pPoints) { 121 if (m_pPoints) {
120 FX_Free(m_pPoints); 122 FX_Free(m_pPoints);
121 } 123 }
122 } 124 }
123 FX_BOOL CFX_PathData::SetPointCount(int nPoints) 125 void CFX_PathData::SetPointCount(int nPoints)
124 { 126 {
125 m_PointCount = nPoints; 127 m_PointCount = nPoints;
126 if (m_AllocCount < nPoints) { 128 if (m_AllocCount < nPoints) {
127 if (m_pPoints) { 129 if (m_pPoints) {
128 FX_Free(m_pPoints); 130 FX_Free(m_pPoints);
129 m_pPoints = NULL; 131 m_pPoints = NULL;
130 } 132 }
131 m_pPoints = FX_Alloc(FX_PATHPOINT, nPoints); 133 m_pPoints = FX_Alloc(FX_PATHPOINT, nPoints);
132 if (!m_pPoints) {
133 return FALSE;
134 }
135 m_AllocCount = nPoints; 134 m_AllocCount = nPoints;
136 } 135 }
137 return TRUE;
138 } 136 }
139 FX_BOOL CFX_PathData::AllocPointCount(int nPoints) 137 void CFX_PathData::AllocPointCount(int nPoints)
140 { 138 {
141 if (m_AllocCount < nPoints) { 139 if (m_AllocCount < nPoints) {
142 FX_PATHPOINT* pNewBuf = FX_Alloc(FX_PATHPOINT, nPoints); 140 FX_PATHPOINT* pNewBuf = FX_Alloc(FX_PATHPOINT, nPoints);
143 if (!pNewBuf) {
144 return FALSE;
145 }
146 if (m_PointCount) { 141 if (m_PointCount) {
147 FXSYS_memcpy32(pNewBuf, m_pPoints, m_PointCount * sizeof(FX_PATHPOIN T)); 142 FXSYS_memcpy32(pNewBuf, m_pPoints, m_PointCount * sizeof(FX_PATHPOIN T));
148 } 143 }
149 if (m_pPoints) { 144 if (m_pPoints) {
150 FX_Free(m_pPoints); 145 FX_Free(m_pPoints);
151 } 146 }
152 m_pPoints = pNewBuf; 147 m_pPoints = pNewBuf;
153 m_AllocCount = nPoints; 148 m_AllocCount = nPoints;
154 } 149 }
155 return TRUE;
156 } 150 }
157 CFX_PathData::CFX_PathData(const CFX_PathData& src) 151 CFX_PathData::CFX_PathData(const CFX_PathData& src)
158 { 152 {
159 m_pPoints = NULL;
160 m_PointCount = m_AllocCount = src.m_PointCount; 153 m_PointCount = m_AllocCount = src.m_PointCount;
161 m_pPoints = FX_Alloc(FX_PATHPOINT, src.m_PointCount); 154 m_pPoints = FX_Alloc(FX_PATHPOINT, src.m_PointCount);
162 if (!m_pPoints) {
163 return;
164 }
165 FXSYS_memcpy32(m_pPoints, src.m_pPoints, sizeof(FX_PATHPOINT) * m_PointCount ); 155 FXSYS_memcpy32(m_pPoints, src.m_pPoints, sizeof(FX_PATHPOINT) * m_PointCount );
166 } 156 }
167 void CFX_PathData::TrimPoints(int nPoints) 157 void CFX_PathData::TrimPoints(int nPoints)
168 { 158 {
169 if (m_PointCount <= nPoints) { 159 if (m_PointCount <= nPoints) {
170 return; 160 return;
171 } 161 }
172 SetPointCount(nPoints); 162 SetPointCount(nPoints);
173 } 163 }
174 FX_BOOL CFX_PathData::AddPointCount(int addPoints) 164 void CFX_PathData::AddPointCount(int addPoints)
175 { 165 {
176 int new_count = m_PointCount + addPoints; 166 pdfium::base::CheckedNumeric<int> safe_new_count = m_PointCount;
177 if (!AllocPointCount(new_count)) { 167 safe_new_count += addPoints;
178 return FALSE; 168 int new_count = safe_new_count.ValueOrDie();
179 } 169 AllocPointCount(new_count);
180 m_PointCount = new_count; 170 m_PointCount = new_count;
181 return TRUE;
182 } 171 }
183 FX_BOOL CFX_PathData::Append(const CFX_PathData* pSrc, const CFX_AffineMatrix* p Matrix) 172 void CFX_PathData::Append(const CFX_PathData* pSrc, const CFX_AffineMatrix* pMat rix)
184 { 173 {
185 int old_count = m_PointCount; 174 int old_count = m_PointCount;
186 if (!AddPointCount(pSrc->m_PointCount)) { 175 AddPointCount(pSrc->m_PointCount);
187 return FALSE; 176 FXSYS_memcpy32(m_pPoints + old_count, pSrc->m_pPoints, pSrc->m_PointCount * sizeof(FX_PATHPOINT));
177 if (pMatrix) {
178 for (int i = 0; i < pSrc->m_PointCount; i ++) {
179 pMatrix->Transform(m_pPoints[old_count + i].m_PointX, m_pPoints[old_ count + i].m_PointY);
180 }
188 } 181 }
189 FXSYS_memcpy32(m_pPoints + old_count, pSrc->m_pPoints, pSrc->m_PointCount * sizeof(FX_PATHPOINT));
190 if (pMatrix == NULL) {
191 return TRUE;
192 }
193 for (int i = 0; i < pSrc->m_PointCount; i ++) {
194 pMatrix->Transform(m_pPoints[old_count + i].m_PointX, m_pPoints[old_coun t + i].m_PointY);
195 }
196 return TRUE;
197 } 182 }
198 void CFX_PathData::SetPoint(int index, FX_FLOAT x, FX_FLOAT y, int flag) 183 void CFX_PathData::SetPoint(int index, FX_FLOAT x, FX_FLOAT y, int flag)
199 { 184 {
200 ASSERT(index < m_PointCount); 185 ASSERT(index < m_PointCount);
201 m_pPoints[index].m_PointX = x; 186 m_pPoints[index].m_PointX = x;
202 m_pPoints[index].m_PointY = y; 187 m_pPoints[index].m_PointY = y;
203 m_pPoints[index].m_Flag = flag; 188 m_pPoints[index].m_Flag = flag;
204 } 189 }
205 FX_BOOL CFX_PathData::AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top) 190 void CFX_PathData::AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX _FLOAT top)
206 { 191 {
207 int old_count = m_PointCount; 192 int old_count = m_PointCount;
208 if (!AddPointCount(5)) { 193 AddPointCount(5);
209 return FALSE;
210 }
211 FX_PATHPOINT* pPoints = m_pPoints + old_count; 194 FX_PATHPOINT* pPoints = m_pPoints + old_count;
212 pPoints[0].m_PointX = pPoints[1].m_PointX = pPoints[4].m_PointX = left; 195 pPoints[0].m_PointX = pPoints[1].m_PointX = pPoints[4].m_PointX = left;
213 pPoints[2].m_PointX = pPoints[3].m_PointX = right; 196 pPoints[2].m_PointX = pPoints[3].m_PointX = right;
214 pPoints[0].m_PointY = pPoints[3].m_PointY = pPoints[4].m_PointY = bottom; 197 pPoints[0].m_PointY = pPoints[3].m_PointY = pPoints[4].m_PointY = bottom;
215 pPoints[1].m_PointY = pPoints[2].m_PointY = top; 198 pPoints[1].m_PointY = pPoints[2].m_PointY = top;
216 pPoints[0].m_Flag = FXPT_MOVETO; 199 pPoints[0].m_Flag = FXPT_MOVETO;
217 pPoints[1].m_Flag = pPoints[2].m_Flag = pPoints[3].m_Flag = FXPT_LINETO; 200 pPoints[1].m_Flag = pPoints[2].m_Flag = pPoints[3].m_Flag = FXPT_LINETO;
218 pPoints[4].m_Flag = FXPT_LINETO | FXPT_CLOSEFIGURE; 201 pPoints[4].m_Flag = FXPT_LINETO | FXPT_CLOSEFIGURE;
219 return TRUE;
220 } 202 }
221 CFX_FloatRect CFX_PathData::GetBoundingBox() const 203 CFX_FloatRect CFX_PathData::GetBoundingBox() const
222 { 204 {
223 CFX_FloatRect rect; 205 CFX_FloatRect rect;
224 if (m_PointCount) { 206 if (m_PointCount) {
225 rect.InitRect(m_pPoints[0].m_PointX, m_pPoints[0].m_PointY); 207 rect.InitRect(m_pPoints[0].m_PointX, m_pPoints[0].m_PointY);
226 for (int i = 1; i < m_PointCount; i ++) { 208 for (int i = 1; i < m_PointCount; i ++) {
227 rect.UpdateRect(m_pPoints[i].m_PointX, m_pPoints[i].m_PointY); 209 rect.UpdateRect(m_pPoints[i].m_PointX, m_pPoints[i].m_PointY);
228 } 210 }
229 } 211 }
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 } 565 }
584 if (pRect) { 566 if (pRect) {
585 pRect->left = x[0]; 567 pRect->left = x[0];
586 pRect->right = x[2]; 568 pRect->right = x[2];
587 pRect->bottom = y[0]; 569 pRect->bottom = y[0];
588 pRect->top = y[2]; 570 pRect->top = y[2];
589 pRect->Normalize(); 571 pRect->Normalize();
590 } 572 }
591 return TRUE; 573 return TRUE;
592 } 574 }
593 FX_BOOL CFX_PathData::Copy(const CFX_PathData &src) 575 void CFX_PathData::Copy(const CFX_PathData &src)
594 { 576 {
595 if (!SetPointCount(src.m_PointCount)) { 577 SetPointCount(src.m_PointCount);
596 return FALSE;
597 }
598 FXSYS_memcpy32(m_pPoints, src.m_pPoints, sizeof(FX_PATHPOINT) * m_PointCount ); 578 FXSYS_memcpy32(m_pPoints, src.m_pPoints, sizeof(FX_PATHPOINT) * m_PointCount );
599 return TRUE;
600 } 579 }
601 CFX_GraphStateData::CFX_GraphStateData() 580 CFX_GraphStateData::CFX_GraphStateData()
602 { 581 {
603 m_LineCap = LineCapButt; 582 m_LineCap = LineCapButt;
604 m_DashCount = 0; 583 m_DashCount = 0;
605 m_DashArray = NULL; 584 m_DashArray = NULL;
606 m_DashPhase = 0; 585 m_DashPhase = 0;
607 m_LineJoin = LineJoinMiter; 586 m_LineJoin = LineJoinMiter;
608 m_MiterLimit = 10 * 1.0f; 587 m_MiterLimit = 10 * 1.0f;
609 m_LineWidth = 1.0f; 588 m_LineWidth = 1.0f;
(...skipping 10 matching lines...) Expand all
620 if (m_DashArray) { 599 if (m_DashArray) {
621 FX_Free(m_DashArray); 600 FX_Free(m_DashArray);
622 } 601 }
623 m_DashArray = NULL; 602 m_DashArray = NULL;
624 m_DashPhase = src.m_DashPhase; 603 m_DashPhase = src.m_DashPhase;
625 m_LineJoin = src.m_LineJoin; 604 m_LineJoin = src.m_LineJoin;
626 m_MiterLimit = src.m_MiterLimit; 605 m_MiterLimit = src.m_MiterLimit;
627 m_LineWidth = src.m_LineWidth; 606 m_LineWidth = src.m_LineWidth;
628 if (m_DashCount) { 607 if (m_DashCount) {
629 m_DashArray = FX_Alloc(FX_FLOAT, m_DashCount); 608 m_DashArray = FX_Alloc(FX_FLOAT, m_DashCount);
630 if (!m_DashArray) {
631 return;
632 }
633 FXSYS_memcpy32(m_DashArray, src.m_DashArray, m_DashCount * sizeof(FX_FLO AT)); 609 FXSYS_memcpy32(m_DashArray, src.m_DashArray, m_DashCount * sizeof(FX_FLO AT));
634 } 610 }
635 } 611 }
636 CFX_GraphStateData::~CFX_GraphStateData() 612 CFX_GraphStateData::~CFX_GraphStateData()
637 { 613 {
638 if (m_DashArray) { 614 if (m_DashArray) {
639 FX_Free(m_DashArray); 615 FX_Free(m_DashArray);
640 } 616 }
641 } 617 }
642 void CFX_GraphStateData::SetDashCount(int count) 618 void CFX_GraphStateData::SetDashCount(int count)
643 { 619 {
644 if (m_DashArray) { 620 if (m_DashArray) {
645 FX_Free(m_DashArray); 621 FX_Free(m_DashArray);
646 } 622 }
647 m_DashArray = NULL; 623 m_DashArray = NULL;
648 m_DashCount = count; 624 m_DashCount = count;
649 if (count == 0) { 625 if (count == 0) {
650 return; 626 return;
651 } 627 }
652 m_DashArray = FX_Alloc(FX_FLOAT, count); 628 m_DashArray = FX_Alloc(FX_FLOAT, count);
653 } 629 }
OLDNEW
« no previous file with comments | « core/src/fxge/ge/fx_ge_fontmap.cpp ('k') | core/src/fxge/ge/fx_ge_ps.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698