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.
