Index: core/fpdfapi/page/cpdf_streamcontentparser.cpp |
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp |
index 107ab1ccaad0022e6217f162e57448ebc97d8ced..8c6038d626b4742e8e7382b6a2a0d9edac70205f 100644 |
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp |
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp |
@@ -306,8 +306,8 @@ int CPDF_StreamContentParser::GetNextParamPos() { |
if (m_ParamStartPos == kParamBufSize) { |
m_ParamStartPos = 0; |
} |
- if (m_ParamBuf[m_ParamStartPos].m_Type == 0) |
- delete m_ParamBuf[m_ParamStartPos].m_pObject; |
+ if (m_ParamBuf[m_ParamStartPos].m_Type == ContentParam::OBJECT) |
+ m_ParamBuf[m_ParamStartPos].m_pObject.reset(); |
return m_ParamStartPos; |
} |
@@ -324,8 +324,8 @@ void CPDF_StreamContentParser::AddNameParam(const FX_CHAR* name, int len) { |
ContentParam& param = m_ParamBuf[GetNextParamPos()]; |
if (len > 32) { |
param.m_Type = ContentParam::OBJECT; |
- param.m_pObject = |
- new CPDF_Name(m_pDocument->GetByteStringPool(), PDF_NameDecode(bsName)); |
+ param.m_pObject = pdfium::MakeUnique<CPDF_Name>( |
+ m_pDocument->GetByteStringPool(), PDF_NameDecode(bsName)); |
} else { |
param.m_Type = ContentParam::NAME; |
if (bsName.Find('#') == -1) { |
@@ -346,22 +346,21 @@ void CPDF_StreamContentParser::AddNumberParam(const FX_CHAR* str, int len) { |
FX_atonum(CFX_ByteStringC(str, len), ¶m.m_Number.m_Integer); |
} |
-void CPDF_StreamContentParser::AddObjectParam(CPDF_Object* pObj) { |
+void CPDF_StreamContentParser::AddObjectParam( |
+ std::unique_ptr<CPDF_Object> pObj) { |
ContentParam& param = m_ParamBuf[GetNextParamPos()]; |
param.m_Type = ContentParam::OBJECT; |
- param.m_pObject = pObj; |
+ param.m_pObject = std::move(pObj); |
} |
void CPDF_StreamContentParser::ClearAllParams() { |
uint32_t index = m_ParamStartPos; |
for (uint32_t i = 0; i < m_ParamCount; i++) { |
- if (m_ParamBuf[index].m_Type == 0) |
- delete m_ParamBuf[index].m_pObject; |
- |
+ if (m_ParamBuf[index].m_Type == ContentParam::OBJECT) |
+ m_ParamBuf[index].m_pObject.reset(); |
index++; |
- if (index == kParamBufSize) { |
+ if (index == kParamBufSize) |
index = 0; |
- } |
} |
m_ParamStartPos = 0; |
m_ParamCount = 0; |
@@ -377,25 +376,23 @@ CPDF_Object* CPDF_StreamContentParser::GetObject(uint32_t index) { |
} |
ContentParam& param = m_ParamBuf[real_index]; |
if (param.m_Type == ContentParam::NUMBER) { |
- CPDF_Number* pNumber = param.m_Number.m_bInteger |
- ? new CPDF_Number(param.m_Number.m_Integer) |
- : new CPDF_Number(param.m_Number.m_Float); |
- |
param.m_Type = ContentParam::OBJECT; |
- param.m_pObject = pNumber; |
- return pNumber; |
+ param.m_pObject = |
+ param.m_Number.m_bInteger |
+ ? pdfium::MakeUnique<CPDF_Number>(param.m_Number.m_Integer) |
+ : pdfium::MakeUnique<CPDF_Number>(param.m_Number.m_Float); |
+ return param.m_pObject.get(); |
} |
if (param.m_Type == ContentParam::NAME) { |
- CPDF_Name* pName = new CPDF_Name( |
+ param.m_Type = ContentParam::OBJECT; |
+ param.m_pObject = pdfium::MakeUnique<CPDF_Name>( |
m_pDocument->GetByteStringPool(), |
CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len)); |
- param.m_Type = ContentParam::OBJECT; |
- param.m_pObject = pName; |
- return pName; |
- } |
- if (param.m_Type == ContentParam::OBJECT) { |
- return param.m_pObject; |
+ return param.m_pObject.get(); |
} |
+ if (param.m_Type == ContentParam::OBJECT) |
+ return param.m_pObject.get(); |
+ |
ASSERT(false); |
return nullptr; |
} |
@@ -651,7 +648,7 @@ void CPDF_StreamContentParser::Handle_BeginImage() { |
} |
CFX_ByteString key((const FX_CHAR*)m_pSyntax->GetWordBuf() + 1, |
m_pSyntax->GetWordSize() - 1); |
- auto pObj = pdfium::WrapUnique(m_pSyntax->ReadNextObject(false, 0)); |
+ auto pObj = m_pSyntax->ReadNextObject(false, 0); |
if (!key.IsEmpty()) { |
uint32_t dwObjNum = pObj ? pObj->GetObjNum() : 0; |
if (dwObjNum) |
@@ -1668,3 +1665,7 @@ void CPDF_StreamContentParser::ParsePathObject() { |
} |
} |
} |
+ |
+CPDF_StreamContentParser::ContentParam::ContentParam() {} |
+ |
+CPDF_StreamContentParser::ContentParam::~ContentParam() {} |