Use more unique_ptrs in CPDF_SyntaxParser and CPDF_Annot

Review-Url: https://codereview.chromium.org/2526543003
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index 17e4954..9beae0b 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -477,9 +477,8 @@
       m_Pos = SavedPos;
       return std::move(pDict);
     }
-    return ReadStream(pDict.release(), objnum, gennum);
+    return ReadStream(std::move(pDict), objnum, gennum);
   }
-
   if (word == ">>")
     m_Pos = SavedObjPos;
 
@@ -587,10 +586,8 @@
       m_Pos = SavedPos;
       return std::move(pDict);
     }
-
-    return ReadStream(pDict.release(), objnum, gennum);
+    return ReadStream(std::move(pDict), objnum, gennum);
   }
-
   if (word == ">>")
     m_Pos = SavedObjPos;
 
@@ -614,7 +611,7 @@
 }
 
 std::unique_ptr<CPDF_Stream> CPDF_SyntaxParser::ReadStream(
-    CPDF_Dictionary* pDict,
+    std::unique_ptr<CPDF_Dictionary> pDict,
     uint32_t objnum,
     uint32_t gennum) {
   CPDF_Object* pLenObj = pDict->GetObjectFor("Length");
@@ -693,10 +690,8 @@
       }
 
       // Can't find "endstream" or "endobj".
-      if (endStreamOffset < 0 && endObjOffset < 0) {
-        delete pDict;
+      if (endStreamOffset < 0 && endObjOffset < 0)
         return nullptr;
-      }
 
       if (endStreamOffset < 0 && endObjOffset >= 0) {
         // Correct the position of end stream.
@@ -707,8 +702,8 @@
       } else if (endStreamOffset > endObjOffset) {
         endStreamOffset = endObjOffset;
       }
-
       len = endStreamOffset;
+
       int numMarkers = ReadEOLMarkers(streamStartPos + endStreamOffset - 2);
       if (numMarkers == 2) {
         len -= 2;
@@ -718,20 +713,15 @@
           len -= 1;
         }
       }
-
-      if (len < 0) {
-        delete pDict;
+      if (len < 0)
         return nullptr;
-      }
+
       pDict->SetNewFor<CPDF_Number>("Length", static_cast<int>(len));
     }
     m_Pos = streamStartPos;
   }
-
-  if (len < 0) {
-    delete pDict;
+  if (len < 0)
     return nullptr;
-  }
 
   uint8_t* pData = nullptr;
   if (len > 0) {
@@ -744,7 +734,6 @@
       void* context = pCryptoHandler->DecryptStart(objnum, gennum);
       pCryptoHandler->DecryptStream(context, pData, len, dest_buf);
       pCryptoHandler->DecryptFinish(context, dest_buf);
-
       FX_Free(pData);
       pData = dest_buf.GetBuffer();
       len = dest_buf.GetSize();
@@ -752,8 +741,7 @@
     }
   }
 
-  auto pStream =
-      pdfium::MakeUnique<CPDF_Stream>(pData, len, pdfium::WrapUnique(pDict));
+  auto pStream = pdfium::MakeUnique<CPDF_Stream>(pData, len, std::move(pDict));
   streamStartPos = m_Pos;
   FXSYS_memset(m_WordBuffer, 0, kEndObjStr.GetLength() + 1);
   GetNextWordInternal(nullptr);
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.h b/core/fpdfapi/parser/cpdf_syntax_parser.h
index 094872a..1e8f736 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.h
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.h
@@ -75,9 +75,10 @@
   CFX_ByteString ReadString();
   CFX_ByteString ReadHexString();
   unsigned int ReadEOLMarkers(FX_FILESIZE pos);
-  std::unique_ptr<CPDF_Stream> ReadStream(CPDF_Dictionary* pDict,
-                                          uint32_t objnum,
-                                          uint32_t gennum);
+  std::unique_ptr<CPDF_Stream> ReadStream(
+      std::unique_ptr<CPDF_Dictionary> pDict,
+      uint32_t objnum,
+      uint32_t gennum);
 
   inline bool CheckPosition(FX_FILESIZE pos) {
     return m_BufOffset >= pos ||
diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp
index a7d2101..70c6b8d 100644
--- a/core/fpdfdoc/cpdf_annot.cpp
+++ b/core/fpdfdoc/cpdf_annot.cpp
@@ -6,6 +6,8 @@
 
 #include "core/fpdfdoc/cpdf_annot.h"
 
+#include <utility>
+
 #include "core/fpdfapi/page/cpdf_form.h"
 #include "core/fpdfapi/page/cpdf_page.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
@@ -205,11 +207,13 @@
   if (it != m_APMap.end())
     return it->second.get();
 
-  CPDF_Form* pNewForm =
-      new CPDF_Form(m_pDocument, pPage->m_pResources, pStream);
+  auto pNewForm =
+      pdfium::MakeUnique<CPDF_Form>(m_pDocument, pPage->m_pResources, pStream);
   pNewForm->ParseContent(nullptr, nullptr, nullptr);
-  m_APMap[pStream] = pdfium::WrapUnique(pNewForm);
-  return pNewForm;
+
+  CPDF_Form* pResult = pNewForm.get();
+  m_APMap[pStream] = std::move(pNewForm);
+  return pResult;
 }
 
 // Static.