diff --git a/core/fpdfapi/font/cpdf_type3char.cpp b/core/fpdfapi/font/cpdf_type3char.cpp
index 41ab824..5eb12c1 100644
--- a/core/fpdfapi/font/cpdf_type3char.cpp
+++ b/core/fpdfapi/font/cpdf_type3char.cpp
@@ -29,8 +29,8 @@
     return false;
 
   m_ImageMatrix = pPageObj->AsImage()->matrix();
-  std::unique_ptr<CFX_DIBSource> pSource(
-      pPageObj->AsImage()->GetImage()->LoadDIBSource());
+  std::unique_ptr<CFX_DIBSource> pSource =
+      pPageObj->AsImage()->GetImage()->LoadDIBSource();
   if (pSource)
     m_pBitmap = pSource->Clone();
   m_pForm.reset();
diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp
index c910319..feafde3 100644
--- a/core/fpdfapi/page/cpdf_image.cpp
+++ b/core/fpdfapi/page/cpdf_image.cpp
@@ -322,18 +322,18 @@
   pPage->GetRenderCache()->ResetBitmap(m_pStream.Get(), pBitmap);
 }
 
-CFX_DIBSource* CPDF_Image::LoadDIBSource(CFX_DIBSource** ppMask,
-                                         uint32_t* pMatteColor,
-                                         bool bStdCS,
-                                         uint32_t GroupFamily,
-                                         bool bLoadMask) const {
+std::unique_ptr<CFX_DIBSource> CPDF_Image::LoadDIBSource(CFX_DIBSource** ppMask,
+                                                         uint32_t* pMatteColor,
+                                                         bool bStdCS,
+                                                         uint32_t GroupFamily,
+                                                         bool bLoadMask) const {
   auto source = pdfium::MakeUnique<CPDF_DIBSource>();
-  if (source->Load(m_pDocument, m_pStream.Get(),
-                   reinterpret_cast<CPDF_DIBSource**>(ppMask), pMatteColor,
-                   nullptr, nullptr, bStdCS, GroupFamily, bLoadMask)) {
-    return source.release();
+  if (!source->Load(m_pDocument, m_pStream.Get(),
+                    reinterpret_cast<CPDF_DIBSource**>(ppMask), pMatteColor,
+                    nullptr, nullptr, bStdCS, GroupFamily, bLoadMask)) {
+    return nullptr;
   }
-  return nullptr;
+  return std::move(source);
 }
 
 CFX_DIBSource* CPDF_Image::DetachBitmap() {
diff --git a/core/fpdfapi/page/cpdf_image.h b/core/fpdfapi/page/cpdf_image.h
index e0fc761..6591897 100644
--- a/core/fpdfapi/page/cpdf_image.h
+++ b/core/fpdfapi/page/cpdf_image.h
@@ -44,11 +44,11 @@
   bool IsMask() const { return m_bIsMask; }
   bool IsInterpol() const { return m_bInterpolate; }
 
-  CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = nullptr,
-                               uint32_t* pMatteColor = nullptr,
-                               bool bStdCS = false,
-                               uint32_t GroupFamily = 0,
-                               bool bLoadMask = false) const;
+  std::unique_ptr<CFX_DIBSource> LoadDIBSource(CFX_DIBSource** ppMask = nullptr,
+                                               uint32_t* pMatteColor = nullptr,
+                                               bool bStdCS = false,
+                                               uint32_t GroupFamily = 0,
+                                               bool bLoadMask = false) const;
 
   void SetImage(const CFX_DIBitmap* pDIBitmap);
   void SetJpegImage(const CFX_RetainPtr<IFX_SeekableReadStream>& pFile);
