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

Side by Side Diff: core/src/fpdfapi/fpdf_page/fpdf_page.cpp

Issue 1297713003: Don't bother checking pointers before delete[] and FX_Free(). (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: rebase Created 5 years, 4 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
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 "../../../include/fpdfapi/fpdf_page.h" 7 #include "../../../include/fpdfapi/fpdf_page.h"
8 #include "../../../include/fpdfapi/fpdf_module.h" 8 #include "../../../include/fpdfapi/fpdf_module.h"
9 #include "pageint.h" 9 #include "pageint.h"
10 CPDF_PageObject* CPDF_PageObject::Create(int type) { 10 CPDF_PageObject* CPDF_PageObject::Create(int type) {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 CPDF_TextObject::CPDF_TextObject() 88 CPDF_TextObject::CPDF_TextObject()
89 : m_PosX(0), 89 : m_PosX(0),
90 m_PosY(0), 90 m_PosY(0),
91 m_nChars(0), 91 m_nChars(0),
92 m_pCharCodes(nullptr), 92 m_pCharCodes(nullptr),
93 m_pCharPos(nullptr) { 93 m_pCharPos(nullptr) {
94 m_Type = PDFPAGE_TEXT; 94 m_Type = PDFPAGE_TEXT;
95 } 95 }
96 96
97 CPDF_TextObject::~CPDF_TextObject() { 97 CPDF_TextObject::~CPDF_TextObject() {
98 if (m_nChars > 1 && m_pCharCodes) { 98 if (m_nChars > 1) {
99 FX_Free(m_pCharCodes); 99 FX_Free(m_pCharCodes);
100 } 100 }
101 if (m_pCharPos) { 101 FX_Free(m_pCharPos);
102 FX_Free(m_pCharPos);
103 }
104 } 102 }
105 103
106 void CPDF_TextObject::GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const { 104 void CPDF_TextObject::GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const {
107 pInfo->m_CharCode = 105 pInfo->m_CharCode =
108 m_nChars == 1 ? (FX_DWORD)(uintptr_t)m_pCharCodes : m_pCharCodes[index]; 106 m_nChars == 1 ? (FX_DWORD)(uintptr_t)m_pCharCodes : m_pCharCodes[index];
109 pInfo->m_OriginX = index ? m_pCharPos[index - 1] : 0; 107 pInfo->m_OriginX = index ? m_pCharPos[index - 1] : 0;
110 pInfo->m_OriginY = 0; 108 pInfo->m_OriginY = 0;
111 if (pInfo->m_CharCode == -1) { 109 if (pInfo->m_CharCode == -1) {
112 return; 110 return;
113 } 111 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 if (count == index) { 177 if (count == index) {
180 GetItemInfo(i, pInfo); 178 GetItemInfo(i, pInfo);
181 break; 179 break;
182 } 180 }
183 ++count; 181 ++count;
184 } 182 }
185 } 183 }
186 184
187 void CPDF_TextObject::CopyData(const CPDF_PageObject* pSrc) { 185 void CPDF_TextObject::CopyData(const CPDF_PageObject* pSrc) {
188 const CPDF_TextObject* pSrcObj = (const CPDF_TextObject*)pSrc; 186 const CPDF_TextObject* pSrcObj = (const CPDF_TextObject*)pSrc;
189 if (m_nChars > 1 && m_pCharCodes) { 187 if (m_nChars > 1) {
190 FX_Free(m_pCharCodes); 188 FX_Free(m_pCharCodes);
191 m_pCharCodes = nullptr; 189 m_pCharCodes = nullptr;
192 } 190 }
193 if (m_pCharPos) { 191 FX_Free(m_pCharPos);
194 FX_Free(m_pCharPos); 192 m_pCharPos = nullptr;
195 m_pCharPos = nullptr;
196 }
197 m_nChars = pSrcObj->m_nChars; 193 m_nChars = pSrcObj->m_nChars;
198 if (m_nChars > 1) { 194 if (m_nChars > 1) {
199 m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars); 195 m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars);
200 m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1); 196 m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1);
201 for (int i = 0; i < m_nChars; ++i) { 197 for (int i = 0; i < m_nChars; ++i) {
202 m_pCharCodes[i] = pSrcObj->m_pCharCodes[i]; 198 m_pCharCodes[i] = pSrcObj->m_pCharCodes[i];
203 } 199 }
204 for (int i = 0; i < m_nChars - 1; ++i) { 200 for (int i = 0; i < m_nChars - 1; ++i) {
205 m_pCharPos[i] = pSrcObj->m_pCharPos[i]; 201 m_pCharPos[i] = pSrcObj->m_pCharPos[i];
206 } 202 }
207 } else { 203 } else {
208 m_pCharCodes = pSrcObj->m_pCharCodes; 204 m_pCharCodes = pSrcObj->m_pCharCodes;
209 } 205 }
210 m_PosX = pSrcObj->m_PosX; 206 m_PosX = pSrcObj->m_PosX;
211 m_PosY = pSrcObj->m_PosY; 207 m_PosY = pSrcObj->m_PosY;
212 } 208 }
213 209
214 void CPDF_TextObject::GetTextMatrix(CFX_AffineMatrix* pMatrix) const { 210 void CPDF_TextObject::GetTextMatrix(CFX_AffineMatrix* pMatrix) const {
215 FX_FLOAT* pTextMatrix = m_TextState.GetMatrix(); 211 FX_FLOAT* pTextMatrix = m_TextState.GetMatrix();
216 pMatrix->Set(pTextMatrix[0], pTextMatrix[2], pTextMatrix[1], pTextMatrix[3], 212 pMatrix->Set(pTextMatrix[0], pTextMatrix[2], pTextMatrix[1], pTextMatrix[3],
217 m_PosX, m_PosY); 213 m_PosX, m_PosY);
218 } 214 }
219 215
220 void CPDF_TextObject::SetSegments(const CFX_ByteString* pStrs, 216 void CPDF_TextObject::SetSegments(const CFX_ByteString* pStrs,
221 FX_FLOAT* pKerning, 217 FX_FLOAT* pKerning,
222 int nsegs) { 218 int nsegs) {
223 if (m_nChars > 1 && m_pCharCodes) { 219 if (m_nChars > 1) {
224 FX_Free(m_pCharCodes); 220 FX_Free(m_pCharCodes);
225 m_pCharCodes = nullptr; 221 m_pCharCodes = nullptr;
226 } 222 }
227 if (m_pCharPos) { 223 FX_Free(m_pCharPos);
228 FX_Free(m_pCharPos); 224 m_pCharPos = nullptr;
229 m_pCharPos = nullptr;
230 }
231 CPDF_Font* pFont = m_TextState.GetFont(); 225 CPDF_Font* pFont = m_TextState.GetFont();
232 m_nChars = 0; 226 m_nChars = 0;
233 for (int i = 0; i < nsegs; ++i) { 227 for (int i = 0; i < nsegs; ++i) {
234 m_nChars += pFont->CountChar(pStrs[i], pStrs[i].GetLength()); 228 m_nChars += pFont->CountChar(pStrs[i], pStrs[i].GetLength());
235 } 229 }
236 m_nChars += nsegs - 1; 230 m_nChars += nsegs - 1;
237 if (m_nChars > 1) { 231 if (m_nChars > 1) {
238 m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars); 232 m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars);
239 m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1); 233 m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1);
240 int index = 0; 234 int index = 0;
(...skipping 14 matching lines...) Expand all
255 pStrs[0], pStrs[0].GetLength(), offset); 249 pStrs[0], pStrs[0].GetLength(), offset);
256 } 250 }
257 } 251 }
258 252
259 void CPDF_TextObject::SetText(const CFX_ByteString& str) { 253 void CPDF_TextObject::SetText(const CFX_ByteString& str) {
260 SetSegments(&str, nullptr, 1); 254 SetSegments(&str, nullptr, 1);
261 RecalcPositionData(); 255 RecalcPositionData();
262 } 256 }
263 257
264 void CPDF_TextObject::SetEmpty() { 258 void CPDF_TextObject::SetEmpty() {
265 if (m_nChars > 1 && m_pCharCodes) { 259 if (m_nChars > 1) {
266 FX_Free(m_pCharCodes); 260 FX_Free(m_pCharCodes);
267 } 261 }
268 if (m_nChars > 1 && m_pCharPos) { 262 if (m_nChars > 1) {
269 FX_Free(m_pCharPos); 263 FX_Free(m_pCharPos);
270 } 264 }
271 m_nChars = 0; 265 m_nChars = 0;
272 m_pCharCodes = nullptr; 266 m_pCharCodes = nullptr;
273 m_pCharPos = nullptr; 267 m_pCharPos = nullptr;
274 m_Left = m_Right = m_PosX; 268 m_Left = m_Right = m_PosX;
275 m_Top = m_Bottom = m_PosY; 269 m_Top = m_Bottom = m_PosY;
276 } 270 }
277 271
278 void CPDF_TextObject::SetText(CFX_ByteString* pStrs, 272 void CPDF_TextObject::SetText(CFX_ByteString* pStrs,
279 FX_FLOAT* pKerning, 273 FX_FLOAT* pKerning,
280 int nSegs) { 274 int nSegs) {
281 SetSegments(pStrs, pKerning, nSegs); 275 SetSegments(pStrs, pKerning, nSegs);
282 RecalcPositionData(); 276 RecalcPositionData();
283 } 277 }
284 278
285 void CPDF_TextObject::SetText(int nChars, 279 void CPDF_TextObject::SetText(int nChars,
286 FX_DWORD* pCharCodes, 280 FX_DWORD* pCharCodes,
287 FX_FLOAT* pKernings) { 281 FX_FLOAT* pKernings) {
288 if (m_nChars > 1 && m_pCharCodes) { 282 if (m_nChars > 1) {
289 FX_Free(m_pCharCodes); 283 FX_Free(m_pCharCodes);
290 m_pCharCodes = nullptr; 284 m_pCharCodes = nullptr;
291 } 285 }
292 if (m_pCharPos) { 286 FX_Free(m_pCharPos);
293 FX_Free(m_pCharPos); 287 m_pCharPos = nullptr;
294 m_pCharPos = nullptr;
295 }
296 int nKernings = 0; 288 int nKernings = 0;
297 int i; 289 int i;
298 for (i = 0; i < nChars - 1; ++i) { 290 for (i = 0; i < nChars - 1; ++i) {
299 if (pKernings[i] != 0) { 291 if (pKernings[i] != 0) {
300 ++nKernings; 292 ++nKernings;
301 } 293 }
302 } 294 }
303 m_nChars = nChars + nKernings; 295 m_nChars = nChars + nKernings;
304 if (m_nChars > 1) { 296 if (m_nChars > 1) {
305 m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars); 297 m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars);
(...skipping 706 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 (FX_FLOAT)y0); 1004 (FX_FLOAT)y0);
1013 matrix = m_PageMatrix; 1005 matrix = m_PageMatrix;
1014 matrix.Concat(display_matrix); 1006 matrix.Concat(display_matrix);
1015 } 1007 }
1016 CPDF_ParseOptions::CPDF_ParseOptions() { 1008 CPDF_ParseOptions::CPDF_ParseOptions() {
1017 m_bTextOnly = FALSE; 1009 m_bTextOnly = FALSE;
1018 m_bMarkedContent = TRUE; 1010 m_bMarkedContent = TRUE;
1019 m_bSeparateForm = TRUE; 1011 m_bSeparateForm = TRUE;
1020 m_bDecodeInlineImage = FALSE; 1012 m_bDecodeInlineImage = FALSE;
1021 } 1013 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_font/ttgsubtable.h ('k') | core/src/fpdfapi/fpdf_page/fpdf_page_colors.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698