| 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) {
|
|
|