| Index: core/fpdfapi/page/cpdf_image.cpp
 | 
| diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp
 | 
| index 60ac1c98152506cd8e1e3718e7b07b5a5f14f6bb..7513403918d4898c727851dce6aac4875a08c06c 100644
 | 
| --- a/core/fpdfapi/page/cpdf_image.cpp
 | 
| +++ b/core/fpdfapi/page/cpdf_image.cpp
 | 
| @@ -7,6 +7,7 @@
 | 
|  #include "core/fpdfapi/page/cpdf_image.h"
 | 
|  
 | 
|  #include <algorithm>
 | 
| +#include <memory>
 | 
|  #include <utility>
 | 
|  #include <vector>
 | 
|  
 | 
| @@ -19,11 +20,13 @@
 | 
|  #include "core/fpdfapi/parser/cpdf_name.h"
 | 
|  #include "core/fpdfapi/parser/cpdf_number.h"
 | 
|  #include "core/fpdfapi/parser/cpdf_reference.h"
 | 
| +#include "core/fpdfapi/parser/cpdf_stream.h"
 | 
|  #include "core/fpdfapi/parser/cpdf_string.h"
 | 
|  #include "core/fpdfapi/render/cpdf_pagerendercache.h"
 | 
|  #include "core/fpdfapi/render/render_int.h"
 | 
|  #include "core/fxcodec/fx_codec.h"
 | 
|  #include "core/fxge/fx_dib.h"
 | 
| +#include "third_party/base/ptr_util.h"
 | 
|  
 | 
|  CPDF_Image::CPDF_Image(CPDF_Document* pDoc) : m_pDocument(pDoc) {}
 | 
|  
 | 
| @@ -147,7 +150,7 @@ void CPDF_Image::SetJpegImage(IFX_SeekableReadStream* pFile) {
 | 
|    if (!pDict)
 | 
|      return;
 | 
|  
 | 
| -  m_pStream->InitStreamFromFile(pFile, pDict);
 | 
| +  m_pStream->InitStreamFromFile(pFile, pdfium::WrapUnique(pDict));
 | 
|  }
 | 
|  
 | 
|  void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) {
 | 
| @@ -160,8 +163,8 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) {
 | 
|    int32_t src_pitch = pBitmap->GetPitch();
 | 
|    int32_t bpp = pBitmap->GetBPP();
 | 
|  
 | 
| -  CPDF_Dictionary* pDict =
 | 
| -      new CPDF_Dictionary(m_pDocument->GetByteStringPool());
 | 
| +  auto pDict =
 | 
| +      pdfium::MakeUnique<CPDF_Dictionary>(m_pDocument->GetByteStringPool());
 | 
|    pDict->SetNewFor<CPDF_Name>("Type", "XObject");
 | 
|    pDict->SetNewFor<CPDF_Name>("Subtype", "Image");
 | 
|    pDict->SetNewFor<CPDF_Number>("Width", BitmapWidth);
 | 
| @@ -222,9 +225,10 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) {
 | 
|          ptr[2] = (uint8_t)argb;
 | 
|          ptr += 3;
 | 
|        }
 | 
| +      auto pNewDict =
 | 
| +          pdfium::MakeUnique<CPDF_Dictionary>(m_pDocument->GetByteStringPool());
 | 
|        CPDF_Stream* pCTS = m_pDocument->NewIndirect<CPDF_Stream>(
 | 
| -          pColorTable, iPalette * 3,
 | 
| -          new CPDF_Dictionary(m_pDocument->GetByteStringPool()));
 | 
| +          pColorTable, iPalette * 3, std::move(pNewDict));
 | 
|        pCS->AddNew<CPDF_Reference>(m_pDocument, pCTS->GetObjNum());
 | 
|        pDict->SetNewFor<CPDF_Reference>("ColorSpace", m_pDocument,
 | 
|                                         pCS->GetObjNum());
 | 
| @@ -259,8 +263,8 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) {
 | 
|      int32_t maskHeight = pMaskBitmap->GetHeight();
 | 
|      uint8_t* mask_buf = nullptr;
 | 
|      FX_STRSIZE mask_size = 0;
 | 
| -    CPDF_Dictionary* pMaskDict =
 | 
| -        new CPDF_Dictionary(m_pDocument->GetByteStringPool());
 | 
| +    auto pMaskDict =
 | 
| +        pdfium::MakeUnique<CPDF_Dictionary>(m_pDocument->GetByteStringPool());
 | 
|      pMaskDict->SetNewFor<CPDF_Name>("Type", "XObject");
 | 
|      pMaskDict->SetNewFor<CPDF_Name>("Subtype", "Image");
 | 
|      pMaskDict->SetNewFor<CPDF_Number>("Width", maskWidth);
 | 
| @@ -279,10 +283,10 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) {
 | 
|        }
 | 
|      }
 | 
|      pMaskDict->SetNewFor<CPDF_Number>("Length", mask_size);
 | 
| -    pDict->SetNewFor<CPDF_Reference>(
 | 
| -        "SMask", m_pDocument,
 | 
| -        m_pDocument->NewIndirect<CPDF_Stream>(mask_buf, mask_size, pMaskDict)
 | 
| -            ->GetObjNum());
 | 
| +    CPDF_Stream* pNewStream = m_pDocument->NewIndirect<CPDF_Stream>(
 | 
| +        mask_buf, mask_size, std::move(pMaskDict));
 | 
| +    pDict->SetNewFor<CPDF_Reference>("SMask", m_pDocument,
 | 
| +                                     pNewStream->GetObjNum());
 | 
|      if (bDeleteMask)
 | 
|        delete pMaskBitmap;
 | 
|    }
 | 
| @@ -295,8 +299,6 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) {
 | 
|          pNewBitmap->Copy(pBitmap);
 | 
|          pNewBitmap->ConvertFormat(FXDIB_Rgb);
 | 
|          SetImage(pNewBitmap, iCompress);
 | 
| -        delete pDict;
 | 
| -        pDict = nullptr;
 | 
|          FX_Free(dest_buf);
 | 
|          dest_buf = nullptr;
 | 
|          dest_size = 0;
 | 
| @@ -340,7 +342,7 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) {
 | 
|      m_pOwnedStream = pdfium::MakeUnique<CPDF_Stream>();
 | 
|      m_pStream = m_pOwnedStream.get();
 | 
|    }
 | 
| -  m_pStream->InitStream(dest_buf, dest_size, pDict);
 | 
| +  m_pStream->InitStream(dest_buf, dest_size, std::move(pDict));
 | 
|    m_bIsMask = pBitmap->IsAlphaMask();
 | 
|    m_Width = BitmapWidth;
 | 
|    m_Height = BitmapHeight;
 | 
| 
 |