Convert most calls to CPDF_Stream::InitStream() to use a ctor.
Add a new CPDF_Stream ctor that takes the same parameters as
InitStream(). Then just create a new CPDF_Stream instead of initializing
an existing CPDF_Stream, which is oftentimes just created.
Change-Id: Id52d9be354c1dbe5ba3a9df025f595208e0e7008
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/85972
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_dib.cpp b/core/fpdfapi/page/cpdf_dib.cpp
index c87e196..586c8af 100644
--- a/core/fpdfapi/page/cpdf_dib.cpp
+++ b/core/fpdfapi/page/cpdf_dib.cpp
@@ -784,9 +784,8 @@
dict->SetNewFor<CPDF_Number>("Height", m_JpxInlineData.height);
dict->SetNewFor<CPDF_Number>("BitsPerComponent", 8);
- auto mask_in_data = pdfium::MakeRetain<CPDF_Stream>();
- mask_in_data->InitStream(m_JpxInlineData.data, dict);
- return StartLoadMaskDIB(std::move(mask_in_data));
+ return StartLoadMaskDIB(
+ pdfium::MakeRetain<CPDF_Stream>(m_JpxInlineData.data, std::move(dict)));
}
RetainPtr<const CPDF_Stream> mask(m_pDict->GetStreamFor("SMask"));
diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp
index 10fe87f..6f2190e 100644
--- a/core/fpdfapi/page/cpdf_image.cpp
+++ b/core/fpdfapi/page/cpdf_image.cpp
@@ -161,7 +161,7 @@
if (!pDict)
return;
- m_pStream->InitStream(data, std::move(pDict));
+ m_pStream = pdfium::MakeRetain<CPDF_Stream>(data, std::move(pDict));
}
void CPDF_Image::SetImage(const RetainPtr<CFX_DIBitmap>& pBitmap) {
@@ -317,10 +317,8 @@
dest_span_offset += dest_pitch;
}
}
- if (!m_pStream)
- m_pStream = pdfium::MakeRetain<CPDF_Stream>();
- m_pStream->InitStream(dest_span, std::move(pDict));
+ m_pStream = pdfium::MakeRetain<CPDF_Stream>(dest_span, std::move(pDict));
m_bIsMask = pBitmap->IsMaskFormat();
m_Width = BitmapWidth;
m_Height = BitmapHeight;
diff --git a/core/fpdfapi/parser/cpdf_object_unittest.cpp b/core/fpdfapi/parser/cpdf_object_unittest.cpp
index 3356b05..8c3d599 100644
--- a/core/fpdfapi/parser/cpdf_object_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_unittest.cpp
@@ -841,8 +841,8 @@
TEST(PDFStreamTest, SetData) {
std::vector<uint8_t, FxAllocAllocator<uint8_t>> data(100);
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->InitStream(data, pdfium::MakeRetain<CPDF_Dictionary>());
+ auto stream = pdfium::MakeRetain<CPDF_Stream>(
+ data, pdfium::MakeRetain<CPDF_Dictionary>());
EXPECT_EQ(static_cast<int>(data.size()),
stream->GetDict()->GetIntegerFor(pdfium::stream::kLength));
@@ -867,8 +867,8 @@
TEST(PDFStreamTest, SetDataAndRemoveFilter) {
std::vector<uint8_t, FxAllocAllocator<uint8_t>> data(100);
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->InitStream(data, pdfium::MakeRetain<CPDF_Dictionary>());
+ auto stream = pdfium::MakeRetain<CPDF_Stream>(
+ data, pdfium::MakeRetain<CPDF_Dictionary>());
EXPECT_EQ(static_cast<int>(data.size()),
stream->GetDict()->GetIntegerFor(pdfium::stream::kLength));
diff --git a/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp b/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp
index 9ac893e..9b9be20 100644
--- a/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp
@@ -34,17 +34,15 @@
TEST(CXFAFileReadTest, NormalStreams) {
std::vector<const CPDF_Stream*> streams;
- auto stream1 = pdfium::MakeRetain<CPDF_Stream>();
- auto stream2 = pdfium::MakeRetain<CPDF_Stream>();
- auto stream3 = pdfium::MakeRetain<CPDF_Stream>();
-
// 16 chars total.
- stream1->InitStream(ByteStringView("one t").raw_span(),
- pdfium::MakeRetain<CPDF_Dictionary>());
- stream2->InitStream(ByteStringView("wo ").raw_span(),
- pdfium::MakeRetain<CPDF_Dictionary>());
- stream3->InitStream(ByteStringView("three!!!").raw_span(),
- pdfium::MakeRetain<CPDF_Dictionary>());
+ auto stream1 =
+ pdfium::MakeRetain<CPDF_Stream>(ByteStringView("one t").raw_span(),
+ pdfium::MakeRetain<CPDF_Dictionary>());
+ auto stream2 = pdfium::MakeRetain<CPDF_Stream>(
+ ByteStringView("wo ").raw_span(), pdfium::MakeRetain<CPDF_Dictionary>());
+ auto stream3 =
+ pdfium::MakeRetain<CPDF_Stream>(ByteStringView("three!!!").raw_span(),
+ pdfium::MakeRetain<CPDF_Dictionary>());
streams.push_back(stream1.Get());
streams.push_back(stream2.Get());
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp
index c655b95..a98ba2e 100644
--- a/core/fpdfapi/parser/cpdf_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_stream.cpp
@@ -33,6 +33,12 @@
CPDF_Stream::CPDF_Stream() = default;
+CPDF_Stream::CPDF_Stream(pdfium::span<const uint8_t> pData,
+ RetainPtr<CPDF_Dictionary> pDict)
+ : m_pDict(std::move(pDict)) {
+ SetData(pData);
+}
+
CPDF_Stream::CPDF_Stream(std::unique_ptr<uint8_t, FxFreeDeleter> pData,
uint32_t size,
RetainPtr<CPDF_Dictionary> pDict)
diff --git a/core/fpdfapi/parser/cpdf_stream.h b/core/fpdfapi/parser/cpdf_stream.h
index 3971097..37d2854 100644
--- a/core/fpdfapi/parser/cpdf_stream.h
+++ b/core/fpdfapi/parser/cpdf_stream.h
@@ -63,6 +63,8 @@
private:
CPDF_Stream();
+ CPDF_Stream(pdfium::span<const uint8_t> pData,
+ RetainPtr<CPDF_Dictionary> pDict);
CPDF_Stream(std::unique_ptr<uint8_t, FxFreeDeleter> pData,
uint32_t size,
RetainPtr<CPDF_Dictionary> pDict);
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index 601d2ad..d29b8ce 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -789,12 +789,14 @@
}
}
- auto pStream = pdfium::MakeRetain<CPDF_Stream>();
+ RetainPtr<CPDF_Stream> pStream;
if (data) {
+ pStream = pdfium::MakeRetain<CPDF_Stream>();
pStream->InitStreamFromFile(data, std::move(pDict));
} else {
DCHECK(!len);
- pStream->InitStream({}, std::move(pDict)); // Empty stream
+ pStream = pdfium::MakeRetain<CPDF_Stream>(pdfium::span<const uint8_t>(),
+ std::move(pDict));
}
const FX_FILESIZE end_stream_offset = GetPos();
memset(m_WordBuffer, 0, kEndObjStr.GetLength() + 1);