Index: core/fpdfapi/page/cpdf_streamcontentparser.cpp |
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp |
index aed5d4b2e214cedb2b9d08e0e9158742bf0f98fe..6ddd278e27f029a2ec2cbae44b03a6e6131d1eaf 100644 |
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp |
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp |
@@ -30,6 +30,7 @@ |
#include "core/fpdfapi/parser/cpdf_document.h" |
#include "core/fpdfapi/parser/cpdf_name.h" |
#include "core/fpdfapi/parser/cpdf_number.h" |
+#include "core/fpdfapi/parser/cpdf_reference.h" |
#include "core/fpdfapi/parser/cpdf_stream.h" |
#include "core/fpdfapi/parser/fpdf_parser_decode.h" |
#include "core/fxcrt/fx_safe_types.h" |
@@ -172,7 +173,7 @@ void ReplaceAbbr(CPDF_Object* pObj) { |
std::vector<AbbrReplacementOp> replacements; |
for (const auto& it : *pDict) { |
CFX_ByteString key = it.first; |
- CPDF_Object* value = it.second; |
+ CPDF_Object* value = it.second.get(); |
CFX_ByteStringC fullname = FindFullName( |
InlineKeyAbbr, FX_ArraySize(InlineKeyAbbr), key.AsStringC()); |
if (!fullname.IsEmpty()) { |
@@ -203,7 +204,7 @@ void ReplaceAbbr(CPDF_Object* pObj) { |
if (op.is_replace_key) |
pDict->ReplaceKey(op.key, CFX_ByteString(op.replacement)); |
else |
- pDict->SetNameFor(op.key, CFX_ByteString(op.replacement)); |
+ pDict->SetNewFor<CPDF_Name>(op.key, CFX_ByteString(op.replacement)); |
} |
break; |
} |
@@ -650,13 +651,13 @@ void CPDF_StreamContentParser::Handle_BeginImage() { |
} |
CFX_ByteString key((const FX_CHAR*)m_pSyntax->GetWordBuf() + 1, |
m_pSyntax->GetWordSize() - 1); |
- std::unique_ptr<CPDF_Object> pObj(m_pSyntax->ReadNextObject(false, 0)); |
+ auto pObj = pdfium::WrapUnique(m_pSyntax->ReadNextObject(false, 0)); |
if (!key.IsEmpty()) { |
uint32_t dwObjNum = pObj ? pObj->GetObjNum() : 0; |
if (dwObjNum) |
- pDict->SetReferenceFor(key, m_pDocument, dwObjNum); |
+ pDict->SetNewFor<CPDF_Reference>(key, m_pDocument, dwObjNum); |
else |
- pDict->SetFor(key, pObj.release()); |
+ pDict->SetFor(key, std::move(pObj)); |
} |
} |
ReplaceAbbr(pDict); |
@@ -667,14 +668,12 @@ void CPDF_StreamContentParser::Handle_BeginImage() { |
CFX_ByteString name = pCSObj->GetString(); |
if (name != "DeviceRGB" && name != "DeviceGray" && name != "DeviceCMYK") { |
pCSObj = FindResourceObj("ColorSpace", name); |
- if (pCSObj && pCSObj->IsInline()) { |
- pCSObj = pCSObj->Clone().release(); |
- pDict->SetFor("ColorSpace", pCSObj); |
- } |
+ if (pCSObj && pCSObj->IsInline()) |
+ pDict->SetFor("ColorSpace", pCSObj->Clone()); |
} |
} |
} |
- pDict->SetNameFor("Subtype", "Image"); |
+ pDict->SetNewFor<CPDF_Name>("Subtype", "Image"); |
std::unique_ptr<CPDF_Stream> pStream( |
m_pSyntax->ReadInlineStream(m_pDocument, pDict, pCSObj)); |
bool bGaveDictAway = !!pStream; |