Further reduce manual memory management in CGdiplusExt::LoadDIBitmap(). Replace pointer from calling FX_Alloc2D() with pdfium::Vector2D. Change-Id: Idf893e7ad3d9657262d9fc33b9ce5a59ca5cf3ce Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/75590 Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: Hui Yingst <nigi@chromium.org>
diff --git a/core/fxge/win32/cgdi_plus_ext.cpp b/core/fxge/win32/cgdi_plus_ext.cpp index 8dcb453..4e915a5 100644 --- a/core/fxge/win32/cgdi_plus_ext.cpp +++ b/core/fxge/win32/cgdi_plus_ext.cpp
@@ -988,17 +988,17 @@ int height = abs(pInfo->pbmi->bmiHeader.biHeight); int width = pInfo->pbmi->bmiHeader.biWidth; int dest_pitch = (width * pInfo->pbmi->bmiHeader.biBitCount + 31) / 32 * 4; - LPBYTE pData = FX_Alloc2D(BYTE, dest_pitch, height); + std::vector<uint8_t, FxAllocAllocator<uint8_t>> data = + pdfium::Vector2D<uint8_t, FxAllocAllocator<uint8_t>>(dest_pitch, height); if (dest_pitch == pInfo->Stride) { - memcpy(pData, pInfo->pScan0, dest_pitch * height); + memcpy(data.data(), pInfo->pScan0, dest_pitch * height); } else { for (int i = 0; i < height; i++) { - memcpy(pData + dest_pitch * i, pInfo->pScan0 + pInfo->Stride * i, + memcpy(data.data() + dest_pitch * i, pInfo->pScan0 + pInfo->Stride * i, dest_pitch); } } RetainPtr<CFX_DIBitmap> pDIBitmap = - CFX_WindowsDIB::LoadFromBuf(pInfo->pbmi, pData); - FX_Free(pData); + CFX_WindowsDIB::LoadFromBuf(pInfo->pbmi, data.data()); return pDIBitmap; }