Index: core/fpdfapi/parser/cpdf_stream.cpp |
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp |
index fd7f08f688920d60641a9dea52fb80dcd9f7f5db..7a54fcf8ff3ef8ebc8109c0652bab8714f15dc85 100644 |
--- a/core/fpdfapi/parser/cpdf_stream.cpp |
+++ b/core/fpdfapi/parser/cpdf_stream.cpp |
@@ -6,6 +6,8 @@ |
#include "core/fpdfapi/parser/cpdf_stream.h" |
+#include <utility> |
+ |
#include "core/fpdfapi/parser/cpdf_dictionary.h" |
#include "core/fpdfapi/parser/cpdf_number.h" |
#include "core/fpdfapi/parser/cpdf_stream_acc.h" |
@@ -15,8 +17,10 @@ |
CPDF_Stream::CPDF_Stream() {} |
-CPDF_Stream::CPDF_Stream(uint8_t* pData, uint32_t size, CPDF_Dictionary* pDict) |
- : m_dwSize(size), m_pDict(pDict), m_pDataBuf(pData) {} |
+CPDF_Stream::CPDF_Stream(uint8_t* pData, |
+ uint32_t size, |
+ std::unique_ptr<CPDF_Dictionary> pDict) |
+ : m_dwSize(size), m_pDict(std::move(pDict)), m_pDataBuf(pData) {} |
CPDF_Stream::~CPDF_Stream() { |
m_ObjNum = kInvalidObjNum; |
@@ -46,8 +50,8 @@ const CPDF_Stream* CPDF_Stream::AsStream() const { |
void CPDF_Stream::InitStream(const uint8_t* pData, |
uint32_t size, |
- CPDF_Dictionary* pDict) { |
- m_pDict.reset(pDict); |
+ std::unique_ptr<CPDF_Dictionary> pDict) { |
+ m_pDict = std::move(pDict); |
m_bMemoryBased = true; |
m_pFile = nullptr; |
m_pDataBuf.reset(FX_Alloc(uint8_t, size)); |
@@ -59,8 +63,8 @@ void CPDF_Stream::InitStream(const uint8_t* pData, |
} |
void CPDF_Stream::InitStreamFromFile(IFX_SeekableReadStream* pFile, |
- CPDF_Dictionary* pDict) { |
- m_pDict.reset(pDict); |
+ std::unique_ptr<CPDF_Dictionary> pDict) { |
+ m_pDict = std::move(pDict); |
m_bMemoryBased = false; |
m_pDataBuf.reset(); |
m_pFile = pFile; |
@@ -79,14 +83,16 @@ std::unique_ptr<CPDF_Object> CPDF_Stream::CloneNonCyclic( |
pVisited->insert(this); |
CPDF_StreamAcc acc; |
acc.LoadAllData(this, true); |
+ |
uint32_t streamSize = acc.GetSize(); |
CPDF_Dictionary* pDict = GetDict(); |
+ std::unique_ptr<CPDF_Dictionary> pNewDict; |
if (pDict && !pdfium::ContainsKey(*pVisited, pDict)) { |
- pDict = ToDictionary(static_cast<CPDF_Object*>(pDict) |
- ->CloneNonCyclic(bDirect, pVisited) |
- .release()); |
+ pNewDict = ToDictionary( |
+ static_cast<CPDF_Object*>(pDict)->CloneNonCyclic(bDirect, pVisited)); |
} |
- return pdfium::MakeUnique<CPDF_Stream>(acc.DetachData(), streamSize, pDict); |
+ return pdfium::MakeUnique<CPDF_Stream>(acc.DetachData(), streamSize, |
+ std::move(pNewDict)); |
} |
void CPDF_Stream::SetData(const uint8_t* pData, uint32_t size) { |