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");
