Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(782)

Unified Diff: core/fpdfapi/parser/cpdf_stream.cpp

Issue 2520493002: Make CPDF_Stream() take unique_ptr's to its dictionary. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: core/fpdfapi/parser/cpdf_stream.cpp
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp
index c90a2d33652001f33772ebfde95548a4162f884d..6290cf98d1295a84b5e69f0b420712032093235a 100644
--- a/core/fpdfapi/parser/cpdf_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_stream.cpp
@@ -15,8 +15,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 +48,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 +61,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 +81,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) {

Powered by Google App Engine
This is Rietveld 408576698