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

Side by Side Diff: core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp

Issue 1142713005: Remove FX_Alloc() null checks now that it can't return NULL. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Fix missing FX_Alloc2D, check overflow on add, remove unused enum. 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
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_module.h" 7 #include "../../../include/fpdfapi/fpdf_module.h"
8 #include "../../../include/fpdfapi/fpdf_page.h" 8 #include "../../../include/fpdfapi/fpdf_page.h"
9 #include "../../../include/fxcodec/fx_codec.h" 9 #include "../../../include/fxcodec/fx_codec.h"
10 #include "../../../include/fpdfapi/fpdf_render.h" 10 #include "../../../include/fpdfapi/fpdf_render.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 { 64 {
65 FX_DWORD size = (FX_DWORD)pFile->GetSize(); 65 FX_DWORD size = (FX_DWORD)pFile->GetSize();
66 if (!size) { 66 if (!size) {
67 return; 67 return;
68 } 68 }
69 FX_DWORD dwEstimateSize = size; 69 FX_DWORD dwEstimateSize = size;
70 if (dwEstimateSize > 8192) { 70 if (dwEstimateSize > 8192) {
71 dwEstimateSize = 8192; 71 dwEstimateSize = 8192;
72 } 72 }
73 FX_LPBYTE pData = FX_Alloc(FX_BYTE, dwEstimateSize); 73 FX_LPBYTE pData = FX_Alloc(FX_BYTE, dwEstimateSize);
74 if (!pData) {
75 return;
76 }
77 pFile->ReadBlock(pData, 0, dwEstimateSize); 74 pFile->ReadBlock(pData, 0, dwEstimateSize);
78 CPDF_Dictionary *pDict = InitJPEG(pData, dwEstimateSize); 75 CPDF_Dictionary *pDict = InitJPEG(pData, dwEstimateSize);
79 FX_Free(pData); 76 FX_Free(pData);
80 if (!pDict && size > dwEstimateSize) { 77 if (!pDict && size > dwEstimateSize) {
81 pData = FX_Alloc(FX_BYTE, size); 78 pData = FX_Alloc(FX_BYTE, size);
82 if (!pData) {
83 return;
84 }
85 pFile->ReadBlock(pData, 0, size); 79 pFile->ReadBlock(pData, 0, size);
86 pDict = InitJPEG(pData, size); 80 pDict = InitJPEG(pData, size);
87 FX_Free(pData); 81 FX_Free(pData);
88 } 82 }
89 if (!pDict) { 83 if (!pDict) {
90 return; 84 return;
91 } 85 }
92 m_pStream->InitStream(pFile, pDict); 86 m_pStream->InitStream(pFile, pDict);
93 } 87 }
94 void _DCTEncodeBitmap(CPDF_Dictionary *pBitmapDict, const CFX_DIBitmap* pBitmap, int quality, FX_LPBYTE &buf, FX_STRSIZE &size) 88 void _DCTEncodeBitmap(CPDF_Dictionary *pBitmapDict, const CFX_DIBitmap* pBitmap, int quality, FX_LPBYTE &buf, FX_STRSIZE &size)
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 pMaskDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Image")); 210 pMaskDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Image"));
217 pMaskDict->SetAtInteger(FX_BSTRC("Width"), maskWidth); 211 pMaskDict->SetAtInteger(FX_BSTRC("Width"), maskWidth);
218 pMaskDict->SetAtInteger(FX_BSTRC("Height"), maskHeight); 212 pMaskDict->SetAtInteger(FX_BSTRC("Height"), maskHeight);
219 pMaskDict->SetAtName(FX_BSTRC("ColorSpace"), FX_BSTRC("DeviceGray")); 213 pMaskDict->SetAtName(FX_BSTRC("ColorSpace"), FX_BSTRC("DeviceGray"));
220 pMaskDict->SetAtInteger(FX_BSTRC("BitsPerComponent"), 8); 214 pMaskDict->SetAtInteger(FX_BSTRC("BitsPerComponent"), 8);
221 if (pMaskBitmap->GetBPP() == 8 && (iCompress & PDF_IMAGE_MASK_LOSSY_COMP RESS) != 0) { 215 if (pMaskBitmap->GetBPP() == 8 && (iCompress & PDF_IMAGE_MASK_LOSSY_COMP RESS) != 0) {
222 _DCTEncodeBitmap(pMaskDict, pMaskBitmap, pParam ? pParam->nQuality : 75, mask_buf, mask_size); 216 _DCTEncodeBitmap(pMaskDict, pMaskBitmap, pParam ? pParam->nQuality : 75, mask_buf, mask_size);
223 } else if (pMaskBitmap->GetFormat() == FXDIB_1bppMask) { 217 } else if (pMaskBitmap->GetFormat() == FXDIB_1bppMask) {
224 _JBIG2EncodeBitmap(pMaskDict, pMaskBitmap, m_pDocument, mask_buf, ma sk_size, TRUE); 218 _JBIG2EncodeBitmap(pMaskDict, pMaskBitmap, m_pDocument, mask_buf, ma sk_size, TRUE);
225 } else { 219 } else {
226 mask_size = maskHeight * maskWidth; 220 mask_buf = FX_Alloc2D(FX_BYTE, maskHeight, maskWidth);
227 mask_buf = FX_Alloc(FX_BYTE, mask_size); 221 mask_size = maskHeight * maskWidth; // Safe since checked alloc ret urned.
228 for (FX_INT32 a = 0; a < maskHeight; a ++) { 222 for (FX_INT32 a = 0; a < maskHeight; a ++) {
229 FXSYS_memcpy32(mask_buf + a * maskWidth, pMaskBitmap->GetScanlin e(a), maskWidth); 223 FXSYS_memcpy32(mask_buf + a * maskWidth, pMaskBitmap->GetScanlin e(a), maskWidth);
230 } 224 }
231 } 225 }
232 if (pMaskDict) { 226 if (pMaskDict) {
233 pMaskDict->SetAtInteger(FX_BSTRC("Length"), mask_size); 227 pMaskDict->SetAtInteger(FX_BSTRC("Length"), mask_size);
234 CPDF_Stream* pMaskStream = NULL; 228 CPDF_Stream* pMaskStream = NULL;
235 if (bUseMatte) { 229 if (bUseMatte) {
236 int a, r, g, b; 230 int a, r, g, b;
237 ArgbDecode(*(pParam->pMatteColor), a, r, g, b); 231 ArgbDecode(*(pParam->pMatteColor), a, r, g, b);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 } 293 }
300 } 294 }
301 } 295 }
302 if (bStream) { 296 if (bStream) {
303 pFileWrite->WriteBlock(dest_buf, dest_size); 297 pFileWrite->WriteBlock(dest_buf, dest_size);
304 FX_Free(dest_buf); 298 FX_Free(dest_buf);
305 dest_buf = NULL; 299 dest_buf = NULL;
306 } 300 }
307 } else if (opType == 1) { 301 } else if (opType == 1) {
308 if (!bStream) { 302 if (!bStream) {
309 dest_size = dest_pitch * BitmapHeight; 303 dest_buf = FX_Alloc2D(FX_BYTE, dest_pitch, BitmapHeight);
310 dest_buf = FX_Alloc(FX_BYTE, dest_size); 304 dest_size = dest_pitch * BitmapHeight; // Safe since checked alloc returned.
311 } 305 }
312 FX_LPBYTE pDest = dest_buf; 306 FX_LPBYTE pDest = dest_buf;
313 for (FX_INT32 i = 0; i < BitmapHeight; i ++) { 307 for (FX_INT32 i = 0; i < BitmapHeight; i ++) {
314 if (!bStream) { 308 if (!bStream) {
315 FXSYS_memcpy32(pDest, src_buf, dest_pitch); 309 FXSYS_memcpy32(pDest, src_buf, dest_pitch);
316 pDest += dest_pitch; 310 pDest += dest_pitch;
317 } else { 311 } else {
318 pFileWrite->WriteBlock(src_buf, dest_pitch); 312 pFileWrite->WriteBlock(src_buf, dest_pitch);
319 } 313 }
320 src_buf += src_pitch; 314 src_buf += src_pitch;
321 } 315 }
322 } else if (opType == 2) { 316 } else if (opType == 2) {
323 if (!bStream) { 317 if (!bStream) {
324 dest_size = dest_pitch * BitmapHeight; 318 dest_buf = FX_Alloc2D(FX_BYTE, dest_pitch, BitmapHeight);
325 dest_buf = FX_Alloc(FX_BYTE, dest_size); 319 dest_size = dest_pitch * BitmapHeight; // Safe since checked alloc returned.
326 } else { 320 } else {
327 dest_buf = FX_Alloc(FX_BYTE, dest_pitch); 321 dest_buf = FX_Alloc(FX_BYTE, dest_pitch);
328 } 322 }
329 FX_LPBYTE pDest = dest_buf; 323 FX_LPBYTE pDest = dest_buf;
330 FX_INT32 src_offset = 0; 324 FX_INT32 src_offset = 0;
331 FX_INT32 dest_offset = 0; 325 FX_INT32 dest_offset = 0;
332 for (FX_INT32 row = 0; row < BitmapHeight; row ++) { 326 for (FX_INT32 row = 0; row < BitmapHeight; row ++) {
333 src_offset = row * src_pitch; 327 src_offset = row * src_pitch;
334 for (FX_INT32 column = 0; column < BitmapWidth; column ++) { 328 for (FX_INT32 column = 0; column < BitmapWidth; column ++) {
335 FX_FLOAT alpha = bUseMatte ? src_buf[src_offset + 3] / 255.0f : 1; 329 FX_FLOAT alpha = bUseMatte ? src_buf[src_offset + 3] / 255.0f : 1;
(...skipping 29 matching lines...) Expand all
365 m_Width = BitmapWidth; 359 m_Width = BitmapWidth;
366 m_Height = BitmapHeight; 360 m_Height = BitmapHeight;
367 if (dest_buf) { 361 if (dest_buf) {
368 FX_Free(dest_buf); 362 FX_Free(dest_buf);
369 } 363 }
370 } 364 }
371 void CPDF_Image::ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pBitmap) 365 void CPDF_Image::ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pBitmap)
372 { 366 {
373 pPage->GetRenderCache()->ResetBitmap(m_pStream, pBitmap); 367 pPage->GetRenderCache()->ResetBitmap(m_pStream, pBitmap);
374 } 368 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp ('k') | core/src/fpdfapi/fpdf_page/fpdf_page.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698