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;
}