Take small suggestions from clang-analyzer run over fpdfapi/
- Avoid (spurious) lifetime warnings.
- Initialize in headers/initializer lists.
- use emplace_back() to avoid copying objects.
Change-Id: I85f5389061eae4840d553d7e56c9800e137d0291
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/100614
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_clippath.cpp b/core/fpdfapi/page/cpdf_clippath.cpp
index df9f836..032aff6 100644
--- a/core/fpdfapi/page/cpdf_clippath.cpp
+++ b/core/fpdfapi/page/cpdf_clippath.cpp
@@ -77,7 +77,7 @@
void CPDF_ClipPath::AppendPath(CPDF_Path path,
CFX_FillRenderOptions::FillType type) {
PathData* pData = m_Ref.GetPrivateCopy();
- pData->m_PathAndTypeList.push_back(std::make_pair(path, type));
+ pData->m_PathAndTypeList.emplace_back(path, type);
}
void CPDF_ClipPath::AppendPathWithAutoMerge(
@@ -131,10 +131,9 @@
CPDF_ClipPath::PathData::PathData() = default;
-CPDF_ClipPath::PathData::PathData(const PathData& that) {
- m_PathAndTypeList = that.m_PathAndTypeList;
-
- m_TextList.resize(that.m_TextList.size());
+CPDF_ClipPath::PathData::PathData(const PathData& that)
+ : m_PathAndTypeList(that.m_PathAndTypeList),
+ m_TextList(that.m_TextList.size()) {
for (size_t i = 0; i < that.m_TextList.size(); ++i) {
if (that.m_TextList[i])
m_TextList[i] = that.m_TextList[i]->Clone();
diff --git a/core/fpdfapi/page/cpdf_color.cpp b/core/fpdfapi/page/cpdf_color.cpp
index e1df66d..57e483c 100644
--- a/core/fpdfapi/page/cpdf_color.cpp
+++ b/core/fpdfapi/page/cpdf_color.cpp
@@ -100,7 +100,7 @@
return true;
}
-CPDF_Pattern* CPDF_Color::GetPattern() const {
+RetainPtr<CPDF_Pattern> CPDF_Color::GetPattern() const {
DCHECK(IsPattern());
return m_pValue ? m_pValue->GetPattern() : nullptr;
}
diff --git a/core/fpdfapi/page/cpdf_color.h b/core/fpdfapi/page/cpdf_color.h
index 7b0e332..d3e605b 100644
--- a/core/fpdfapi/page/cpdf_color.h
+++ b/core/fpdfapi/page/cpdf_color.h
@@ -40,7 +40,7 @@
bool GetRGB(int* R, int* G, int* B) const;
// Should only be called if IsPattern() returns true.
- CPDF_Pattern* GetPattern() const;
+ RetainPtr<CPDF_Pattern> GetPattern() const;
protected:
bool IsPatternInternal() const;
diff --git a/core/fpdfapi/page/cpdf_meshstream.cpp b/core/fpdfapi/page/cpdf_meshstream.cpp
index 74e7e9f..95f560f 100644
--- a/core/fpdfapi/page/cpdf_meshstream.cpp
+++ b/core/fpdfapi/page/cpdf_meshstream.cpp
@@ -254,7 +254,7 @@
if (m_BitStream->IsEOF() || !CanReadCoords())
return std::vector<CPDF_MeshVertex>();
- vertices.push_back(CPDF_MeshVertex());
+ vertices.emplace_back();
CPDF_MeshVertex& vertex = vertices.back();
vertex.position = pObject2Bitmap.Transform(ReadCoords());
if (!CanReadColor())
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index 4202bcd..c215775 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -700,11 +700,11 @@
}
void CPDF_StreamContentParser::Handle_SetDash() {
- CPDF_Array* pArray = ToArray(GetObject(1));
+ RetainPtr<CPDF_Array> pArray = ToArray(GetObject(1));
if (!pArray)
return;
- m_pCurStates->SetLineDash(pArray, GetNumber(0), 1.0f);
+ m_pCurStates->SetLineDash(pArray.Get(), GetNumber(0), 1.0f);
}
void CPDF_StreamContentParser::Handle_SetCharWidth() {
@@ -1035,7 +1035,7 @@
}
void CPDF_StreamContentParser::Handle_SetColorPS_Fill() {
- CPDF_Object* pLastParam = GetObject(0);
+ RetainPtr<CPDF_Object> pLastParam = GetObject(0);
if (!pLastParam)
return;
@@ -1055,7 +1055,7 @@
}
void CPDF_StreamContentParser::Handle_SetColorPS_Stroke() {
- CPDF_Object* pLastParam = GetObject(0);
+ RetainPtr<CPDF_Object> pLastParam = GetObject(0);
if (!pLastParam)
return;
@@ -1280,7 +1280,7 @@
}
void CPDF_StreamContentParser::Handle_ShowText_Positioning() {
- CPDF_Array* pArray = ToArray(GetObject(0));
+ RetainPtr<CPDF_Array> pArray = ToArray(GetObject(0));
if (!pArray)
return;
@@ -1435,7 +1435,7 @@
} else if (m_PathPoints.empty()) {
return;
}
- m_PathPoints.push_back(CFX_Path::Point(point, type, /*close=*/false));
+ m_PathPoints.emplace_back(point, type, /*close=*/false);
}
void CPDF_StreamContentParser::AddPathPointAndClose(
@@ -1445,7 +1445,7 @@
if (m_PathPoints.empty())
return;
- m_PathPoints.push_back(CFX_Path::Point(point, type, /*close=*/true));
+ m_PathPoints.emplace_back(point, type, /*close=*/true);
}
void CPDF_StreamContentParser::AddPathObject(
diff --git a/core/fpdfapi/parser/cpdf_cross_ref_table.h b/core/fpdfapi/parser/cpdf_cross_ref_table.h
index 91da486..c1d639f 100644
--- a/core/fpdfapi/parser/cpdf_cross_ref_table.h
+++ b/core/fpdfapi/parser/cpdf_cross_ref_table.h
@@ -27,19 +27,20 @@
};
struct ObjectInfo {
- ObjectInfo() : pos(0), type(ObjectType::kFree), gennum(0) {}
+ ObjectInfo() = default;
+
// If `type` is `ObjectType::kCompressed`, `archive` should be used.
// If `type` is `ObjectType::kNotCompressed`, `pos` should be used.
// In other cases, it is unused.
union {
- FX_FILESIZE pos;
+ FX_FILESIZE pos = 0;
struct {
uint32_t obj_num;
uint32_t obj_index;
} archive;
};
- ObjectType type;
- uint16_t gennum;
+ ObjectType type = ObjectType::kFree;
+ uint16_t gennum = 0;
};
// Merge cross reference tables. Apply top on current.
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index 9182a37..83e090e 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -237,7 +237,7 @@
} else {
// If the vector has size level+1, the child is not in yet
if (m_pTreeTraversal.size() == level + 1)
- m_pTreeTraversal.push_back(std::make_pair(std::move(pKid), 0));
+ m_pTreeTraversal.emplace_back(std::move(pKid), 0);
// Now m_pTreeTraversal[level+1] should exist and be equal to pKid.
CPDF_Dictionary* pageKid = TraversePDFPages(iPage, nPagesToGo, level + 1);
// Check if child was completely processed, i.e. it popped itself out
@@ -305,7 +305,7 @@
if (m_pTreeTraversal.empty()) {
ResetTraversal();
- m_pTreeTraversal.push_back(std::make_pair(std::move(pPages), 0));
+ m_pTreeTraversal.emplace_back(std::move(pPages), 0);
}
int nPagesToGo = iPage - m_iNextPageToTraverse + 1;
RetainPtr<CPDF_Dictionary> pPage = TraversePDFPages(iPage, &nPagesToGo, 0);
diff --git a/core/fpdfapi/parser/cpdf_object_stream.cpp b/core/fpdfapi/parser/cpdf_object_stream.cpp
index b68c89c..7d0bf58 100644
--- a/core/fpdfapi/parser/cpdf_object_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_object_stream.cpp
@@ -106,7 +106,7 @@
if (!obj_num)
continue;
- object_info_.push_back({obj_num, obj_offset});
+ object_info_.emplace_back(obj_num, obj_offset);
}
}
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index 4b3b407..cf7215d 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -306,7 +306,7 @@
if (!GetTrailer())
return FORMAT_ERROR;
- const CPDF_Dictionary* pEncryptDict = GetEncryptDict();
+ RetainPtr<const CPDF_Dictionary> pEncryptDict = GetEncryptDict();
if (!pEncryptDict)
return SUCCESS;
diff --git a/core/fpdfapi/parser/fpdf_parser_decode.cpp b/core/fpdfapi/parser/fpdf_parser_decode.cpp
index 3955df8..baf65f5 100644
--- a/core/fpdfapi/parser/fpdf_parser_decode.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_decode.cpp
@@ -383,14 +383,14 @@
RetainPtr<const CPDF_Array> pParamsArray = ToArray(pParams);
for (size_t i = 0; i < pDecoders->size(); ++i) {
- decoder_array.push_back(
- {pDecoders->GetByteStringAt(i),
- pParamsArray ? pParamsArray->GetDictAt(i) : nullptr});
+ decoder_array.emplace_back(
+ pDecoders->GetByteStringAt(i),
+ pParamsArray ? pParamsArray->GetDictAt(i) : nullptr);
}
} else {
DCHECK(pFilter->IsName());
- decoder_array.push_back(
- {pFilter->GetString(), pParams ? pParams->GetDict() : nullptr});
+ decoder_array.emplace_back(pFilter->GetString(),
+ pParams ? pParams->GetDict() : nullptr);
}
return decoder_array;
@@ -412,7 +412,8 @@
for (size_t i = 0; i < nSize; ++i) {
int estimated_size = i == nSize - 1 ? last_estimated_size : 0;
ByteString decoder = decoder_array[i].first;
- const CPDF_Dictionary* pParam = ToDictionary(decoder_array[i].second);
+ RetainPtr<const CPDF_Dictionary> pParam =
+ ToDictionary(decoder_array[i].second);
std::unique_ptr<uint8_t, FxFreeDeleter> new_buf;
uint32_t new_size = 0xFFFFFFFF;
uint32_t offset = FX_INVALID_OFFSET;
@@ -423,7 +424,7 @@
*ImageEncoding = "FlateDecode";
*dest_buf = std::move(result);
*dest_size = last_span.size();
- pImageParams->Reset(pParam);
+ *pImageParams = std::move(pParam);
return true;
}
offset = FlateOrLZWDecode(false, last_span, pParam, estimated_size,
@@ -440,7 +441,7 @@
*ImageEncoding = "RunLengthDecode";
*dest_buf = std::move(result);
*dest_size = last_span.size();
- pImageParams->Reset(pParam);
+ *pImageParams = std::move(pParam);
return true;
}
offset = RunLengthDecode(last_span, &new_buf, &new_size);
@@ -451,7 +452,7 @@
else if (decoder == "CCF")
decoder = "CCITTFaxDecode";
*ImageEncoding = std::move(decoder);
- pImageParams->Reset(pParam);
+ *pImageParams = std::move(pParam);
*dest_buf = std::move(result);
*dest_size = last_span.size();
return true;
diff --git a/core/fpdfapi/render/cpdf_docrenderdata_unittest.cpp b/core/fpdfapi/render/cpdf_docrenderdata_unittest.cpp
index f9d33c8..df7bb1c 100644
--- a/core/fpdfapi/render/cpdf_docrenderdata_unittest.cpp
+++ b/core/fpdfapi/render/cpdf_docrenderdata_unittest.cpp
@@ -152,7 +152,7 @@
class TestDocRenderData : public CPDF_DocRenderData {
public:
- TestDocRenderData() : CPDF_DocRenderData() {}
+ TestDocRenderData() = default;
RetainPtr<CPDF_TransferFunc> CreateTransferFuncForTesting(
RetainPtr<const CPDF_Object> pObj) const {
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 7aab424..f45c811 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -130,7 +130,7 @@
if (m_pDIBBase->IsMaskFormat()) {
const CPDF_Color* pColor = m_pImageObject->m_ColorState.GetFillColor();
if (pColor && pColor->IsPattern()) {
- m_pPattern.Reset(pColor->GetPattern());
+ m_pPattern = pColor->GetPattern();
if (m_pPattern)
m_bPatternColor = true;
}
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index e66b762..f696ade 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1216,7 +1216,7 @@
const CFX_Matrix& mtObj2Device,
const CPDF_Color* pColor,
bool stroke) {
- CPDF_Pattern* pattern = pColor->GetPattern();
+ RetainPtr<CPDF_Pattern> pattern = pColor->GetPattern();
if (!pattern)
return;