Use unique_ptr<CPDF_Object, ReleaseDeleter<>> in more places

Review-Url: https://codereview.chromium.org/2358243002
diff --git a/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp b/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
index c433063..d29b983 100644
--- a/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
+++ b/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
@@ -814,7 +814,7 @@
   offset += len + 8;
   if (bEOF) {
     if ((len = PDF_CreatorWriteTrailer(pCreator->m_pDocument, pFile,
-                                       pCreator->m_pIDArray)) < 0) {
+                                       pCreator->m_pIDArray.get())) < 0) {
       return FALSE;
     }
     offset += len;
@@ -1810,7 +1810,7 @@
         return -1;
       }
       FX_FILESIZE offset = 0;
-      if (PDF_CreatorAppendObject(m_pIDArray, &m_File, offset) < 0) {
+      if (PDF_CreatorAppendObject(m_pIDArray.get(), &m_File, offset) < 0) {
         return -1;
       }
     }
@@ -1904,10 +1904,7 @@
   m_pXRefStream.reset();
   m_File.Clear();
   m_NewObjNumArray.RemoveAll();
-  if (m_pIDArray) {
-    m_pIDArray->Release();
-    m_pIDArray = nullptr;
-  }
+  m_pIDArray.reset();
 }
 
 bool CPDF_Creator::Create(IFX_StreamWrite* pFile, uint32_t flags) {
@@ -1931,8 +1928,8 @@
 void CPDF_Creator::InitID(FX_BOOL bDefault) {
   CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : nullptr;
   FX_BOOL bNewId = !m_pIDArray;
-  if (!m_pIDArray) {
-    m_pIDArray = new CPDF_Array;
+  if (bNewId) {
+    m_pIDArray.reset(new CPDF_Array);
     CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetObjectAt(0) : nullptr;
     if (pID1) {
       m_pIDArray->Add(pID1->Clone());
@@ -1965,7 +1962,7 @@
       uint32_t flag = PDF_ENCRYPT_CONTENT;
 
       CPDF_SecurityHandler handler;
-      handler.OnCreate(m_pEncryptDict, m_pIDArray, user_pass.raw_str(),
+      handler.OnCreate(m_pEncryptDict, m_pIDArray.get(), user_pass.raw_str(),
                        user_pass.GetLength(), flag);
       if (m_bLocalCryptoHandler)
         delete m_pCryptoHandler;
diff --git a/core/fpdfapi/fpdf_edit/include/cpdf_creator.h b/core/fpdfapi/fpdf_edit/include/cpdf_creator.h
index 285efff..d922e21 100644
--- a/core/fpdfapi/fpdf_edit/include/cpdf_creator.h
+++ b/core/fpdfapi/fpdf_edit/include/cpdf_creator.h
@@ -94,7 +94,7 @@
   FX_FILESIZE m_XrefStart;
   CFX_FileSizeListArray m_ObjectOffset;
   CFX_ArrayTemplate<uint32_t> m_NewObjNumArray;
-  CPDF_Array* m_pIDArray;
+  std::unique_ptr<CPDF_Array, ReleaseDeleter<CPDF_Array>> m_pIDArray;
   int32_t m_FileVersion;
 };
 
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index cbce1aa..38f7648 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -577,17 +577,16 @@
           if (pValue->GetUnicodeText() == opt_value)
             m_pDict->RemoveFor("V");
         } else if (pValue->IsArray()) {
-          CPDF_Array* pArray = new CPDF_Array;
+          std::unique_ptr<CPDF_Array, ReleaseDeleter<CPDF_Array>> pArray(
+              new CPDF_Array);
           for (int i = 0; i < CountOptions(); i++) {
             if (i != index && IsItemSelected(i)) {
               opt_value = GetOptionValue(i);
               pArray->AddString(PDF_EncodeText(opt_value));
             }
           }
-          if (pArray->GetCount() < 1)
-            pArray->Release();
-          else
-            m_pDict->SetFor("V", pArray);
+          if (pArray->GetCount() > 0)
+            m_pDict->SetFor("V", pArray.release());  // std::move someday
         }
       } else {
         m_pDict->RemoveFor("V");