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