Add more CPDF_Stream constructors
Instead of using the default CPDF_Stream constructor that creates
uninitialized objects, and then immediately initialize, just initialize
using the appropriate constructor. This will make it easier to get rid
of the default CPDF_Stream constructor in the near future.
Along the way, rename some variables to follow the style guide, and add
more comments to explain how CPDF_Stream constructors behave.
Change-Id: Iecfd106a502f1eb9a0b652c56e5a93977fdff2ef
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/115672
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
diff --git a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
index 4be22e6..f83852b 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
@@ -92,8 +92,7 @@
}
size_t CPDF_PageContentManager::AddStream(fxcrt::ostringstream* buf) {
- auto new_stream = document_->NewIndirect<CPDF_Stream>();
- new_stream->SetDataFromStringstream(buf);
+ auto new_stream = document_->NewIndirect<CPDF_Stream>(buf);
// If there is one Content stream (not in an array), now there will be two, so
// create an array with the old and the new one. The new one's index is 1.
@@ -146,8 +145,7 @@
}
if (GetContentsStream()) {
- auto new_stream = document_->NewIndirect<CPDF_Stream>();
- new_stream->SetDataFromStringstream(buf);
+ auto new_stream = document_->NewIndirect<CPDF_Stream>(buf);
RetainPtr<CPDF_Dictionary> page_dict = page_obj_holder_->GetMutableDict();
page_dict->SetNewFor<CPDF_Reference>("Contents", document_,
new_stream->GetObjNum());
@@ -164,8 +162,7 @@
return;
}
- auto new_stream = document_->NewIndirect<CPDF_Stream>();
- new_stream->SetDataFromStringstream(buf);
+ auto new_stream = document_->NewIndirect<CPDF_Stream>(buf);
stream_reference->SetRef(document_, new_stream->GetObjNum());
}
diff --git a/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp b/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
index 7a3015d..a9441ce 100644
--- a/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
+++ b/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
@@ -65,24 +65,21 @@
{
static constexpr uint8_t kInput1[] =
"beginbfrange<FFFFFFFF><FFFFFFFF>[<0041>]endbfrange";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(pdfium::make_span(kInput1));
+ auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput1));
CPDF_ToUnicodeMap map(stream);
EXPECT_STREQ(L"A", map.Lookup(0xffffffff).c_str());
}
{
static constexpr uint8_t kInput2[] =
"beginbfrange<FFFFFFFF><FFFFFFFF><0042>endbfrange";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(pdfium::make_span(kInput2));
+ auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput2));
CPDF_ToUnicodeMap map(stream);
EXPECT_STREQ(L"B", map.Lookup(0xffffffff).c_str());
}
{
static constexpr uint8_t kInput3[] =
"beginbfrange<FFFFFFFF><FFFFFFFF><00410042>endbfrange";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(pdfium::make_span(kInput3));
+ auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput3));
CPDF_ToUnicodeMap map(stream);
EXPECT_STREQ(L"AB", map.Lookup(0xffffffff).c_str());
}
@@ -93,8 +90,7 @@
// Both the CIDs and the unicodes are different.
static constexpr uint8_t kInput1[] =
"beginbfchar<1><0041><2><0042>endbfchar";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(pdfium::make_span(kInput1));
+ auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput1));
CPDF_ToUnicodeMap map(stream);
EXPECT_EQ(1u, map.ReverseLookup(0x0041));
EXPECT_EQ(2u, map.ReverseLookup(0x0042));
@@ -105,8 +101,7 @@
// The same CID with different unicodes.
static constexpr uint8_t kInput2[] =
"beginbfrange<0><0><0041><0><0><0042>endbfrange";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(pdfium::make_span(kInput2));
+ auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput2));
CPDF_ToUnicodeMap map(stream);
EXPECT_EQ(0u, map.ReverseLookup(0x0041));
EXPECT_EQ(0u, map.ReverseLookup(0x0042));
@@ -118,8 +113,7 @@
static constexpr uint8_t kInput3[] =
"beginbfrange<0><0>[<0041>]endbfrange\n"
"beginbfchar<0><0041>endbfchar";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(pdfium::make_span(kInput3));
+ auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput3));
CPDF_ToUnicodeMap map(stream);
EXPECT_EQ(0u, map.ReverseLookup(0x0041));
EXPECT_EQ(1u, map.GetUnicodeCountByCharcodeForTesting(0u));
diff --git a/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp b/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp
index 4bd3d85..68fbbe7 100644
--- a/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp
@@ -9,7 +9,6 @@
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
-#include "core/fxcrt/data_vector.h"
#include "testing/gtest/include/gtest/gtest.h"
TEST(CPDFSeekableMultiStreamTest, NoStreams) {
@@ -44,15 +43,9 @@
ByteStringView one_view(kOne);
ByteStringView two_view(kTwo);
ByteStringView three_view(kThree);
- auto stream1 = pdfium::MakeRetain<CPDF_Stream>(
- DataVector<uint8_t>(one_view.begin(), one_view.end()),
- pdfium::MakeRetain<CPDF_Dictionary>());
- auto stream2 = pdfium::MakeRetain<CPDF_Stream>(
- DataVector<uint8_t>(two_view.begin(), two_view.end()),
- pdfium::MakeRetain<CPDF_Dictionary>());
- auto stream3 = pdfium::MakeRetain<CPDF_Stream>(
- DataVector<uint8_t>(three_view.begin(), three_view.end()),
- pdfium::MakeRetain<CPDF_Dictionary>());
+ auto stream1 = pdfium::MakeRetain<CPDF_Stream>(one_view.raw_span());
+ auto stream2 = pdfium::MakeRetain<CPDF_Stream>(two_view.raw_span());
+ auto stream3 = pdfium::MakeRetain<CPDF_Stream>(three_view.raw_span());
std::vector<RetainPtr<const CPDF_Stream>> streams;
streams.push_back(std::move(stream1));
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp
index fa08ffa..a21d6c6 100644
--- a/core/fpdfapi/parser/cpdf_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_stream.cpp
@@ -38,12 +38,29 @@
CPDF_Stream::CPDF_Stream() = default;
-CPDF_Stream::CPDF_Stream(RetainPtr<CPDF_Dictionary> pDict)
- : CPDF_Stream(DataVector<uint8_t>(), std::move(pDict)) {}
+CPDF_Stream::CPDF_Stream(RetainPtr<CPDF_Dictionary> dict)
+ : CPDF_Stream(DataVector<uint8_t>(), std::move(dict)) {}
-CPDF_Stream::CPDF_Stream(DataVector<uint8_t> pData,
- RetainPtr<CPDF_Dictionary> pDict)
- : data_(std::move(pData)), dict_(std::move(pDict)) {
+CPDF_Stream::CPDF_Stream(pdfium::span<const uint8_t> span)
+ : dict_(pdfium::MakeRetain<CPDF_Dictionary>()) {
+ SetData(span);
+}
+
+CPDF_Stream::CPDF_Stream(fxcrt::ostringstream* stream)
+ : dict_(pdfium::MakeRetain<CPDF_Dictionary>()) {
+ SetDataFromStringstream(stream);
+}
+
+CPDF_Stream::CPDF_Stream(RetainPtr<IFX_SeekableReadStream> file,
+ RetainPtr<CPDF_Dictionary> dict)
+ : data_(std::move(file)), dict_(std::move(dict)) {
+ SetLengthInDict(pdfium::base::checked_cast<int>(
+ absl::get<RetainPtr<IFX_SeekableReadStream>>(data_)->GetSize()));
+}
+
+CPDF_Stream::CPDF_Stream(DataVector<uint8_t> data,
+ RetainPtr<CPDF_Dictionary> dict)
+ : data_(std::move(data)), dict_(std::move(dict)) {
SetLengthInDict(pdfium::base::checked_cast<int>(
absl::get<DataVector<uint8_t>>(data_).size()));
}
diff --git a/core/fpdfapi/parser/cpdf_stream.h b/core/fpdfapi/parser/cpdf_stream.h
index f1bb78b..314992e 100644
--- a/core/fpdfapi/parser/cpdf_stream.h
+++ b/core/fpdfapi/parser/cpdf_stream.h
@@ -75,10 +75,23 @@
// Uninitialized.
CPDF_Stream();
- // Initializes with empty data.
- explicit CPDF_Stream(RetainPtr<CPDF_Dictionary> pDict);
+ // Initializes with empty data and /Length set to 0 in `dict`.
+ // If `dict` is null, then a new dictionary will be created instead.
+ explicit CPDF_Stream(RetainPtr<CPDF_Dictionary> dict);
- CPDF_Stream(DataVector<uint8_t> pData, RetainPtr<CPDF_Dictionary> pDict);
+ // Copies `span` and `stream`, respectively. Creates a new dictionary with the
+ // /Length set.
+ explicit CPDF_Stream(pdfium::span<const uint8_t> span);
+ explicit CPDF_Stream(fxcrt::ostringstream* stream);
+
+ // Reads data from `file`. `dict` will have its /Length set based on `file`.
+ // If `dict` is null, then a new dictionary will be created instead.
+ CPDF_Stream(RetainPtr<IFX_SeekableReadStream> file,
+ RetainPtr<CPDF_Dictionary> dict);
+
+ // Takes `data`.
+ // If `dict` is null, then a new dictionary will be created instead.
+ CPDF_Stream(DataVector<uint8_t> data, RetainPtr<CPDF_Dictionary> dict);
~CPDF_Stream() override;
const CPDF_Dictionary* GetDictInternal() const override;
diff --git a/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp b/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
index 4821dc5..caf7c95 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
@@ -14,8 +14,7 @@
#include "testing/invalid_seekable_read_stream.h"
TEST(StreamAccTest, ReadRawDataFailed) {
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->InitStreamFromFile(
+ auto stream = pdfium::MakeRetain<CPDF_Stream>(
pdfium::MakeRetain<InvalidSeekableReadStream>(1024),
pdfium::MakeRetain<CPDF_Dictionary>());
auto stream_acc = pdfium::MakeRetain<CPDF_StreamAcc>(std::move(stream));
@@ -27,8 +26,7 @@
// failure with UnownedPtr.
TEST(StreamAccTest, DataStreamLifeTime) {
constexpr uint8_t kData[] = {'a', 'b', 'c'};
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(kData);
+ auto stream = pdfium::MakeRetain<CPDF_Stream>(kData);
auto stream_acc = pdfium::MakeRetain<CPDF_StreamAcc>(stream);
stream_acc->LoadAllDataRaw();
stream.Reset();
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index defaa06..7b35697 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -785,11 +785,11 @@
}
}
- RetainPtr<CPDF_Stream> pStream;
+ RetainPtr<CPDF_Stream> stream;
if (substream) {
// It is unclear from CPDF_SyntaxParser's perspective what object
// `substream` is ultimately holding references to. To avoid unexpectedly
- // changing object lifetimes by handing `substream` to `pStream`, make a
+ // changing object lifetimes by handing `substream` to `stream`, make a
// copy of the data here.
auto data = FixedSizeDataVector<uint8_t>::Uninit(substream->GetSize());
bool did_read = substream->ReadBlockAtOffset(data.span(), 0);
@@ -797,11 +797,11 @@
auto data_as_stream =
pdfium::MakeRetain<CFX_ReadOnlyVectorStream>(std::move(data));
- pStream = pdfium::MakeRetain<CPDF_Stream>();
- pStream->InitStreamFromFile(std::move(data_as_stream), std::move(pDict));
+ stream = pdfium::MakeRetain<CPDF_Stream>(std::move(data_as_stream),
+ std::move(pDict));
} else {
DCHECK(!len);
- pStream = pdfium::MakeRetain<CPDF_Stream>(std::move(pDict));
+ stream = pdfium::MakeRetain<CPDF_Stream>(std::move(pDict));
}
const FX_FILESIZE end_stream_offset = GetPos();
memset(m_WordBuffer, 0, kEndObjStr.GetLength() + 1);
@@ -821,7 +821,7 @@
memcmp(m_WordBuffer, kEndObjStr.raw_str(), kEndObjStr.GetLength()) == 0) {
SetPos(end_stream_offset);
}
- return pStream;
+ return stream;
}
uint32_t CPDF_SyntaxParser::GetDirectNum() {
diff --git a/core/fpdfdoc/cpdf_filespec_unittest.cpp b/core/fpdfdoc/cpdf_filespec_unittest.cpp
index e898076..48eaa8a 100644
--- a/core/fpdfdoc/cpdf_filespec_unittest.cpp
+++ b/core/fpdfdoc/cpdf_filespec_unittest.cpp
@@ -16,7 +16,6 @@
#include "core/fpdfapi/parser/cpdf_reference.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
#include "core/fpdfapi/parser/cpdf_string.h"
-#include "core/fxcrt/data_vector.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/test_support.h"
@@ -176,10 +175,9 @@
dict_obj->SetNewFor<CPDF_String>(keys[i], file_name);
// Set the file stream.
- size_t buf_len = strlen(streams[i]) + 1;
- auto stream_object = object_holder.NewIndirect<CPDF_Stream>(
- DataVector<uint8_t>(streams[i], streams[i] + buf_len),
- pdfium::MakeRetain<CPDF_Dictionary>());
+ auto stream_object =
+ object_holder.NewIndirect<CPDF_Stream>(pdfium::as_bytes(
+ pdfium::make_span(streams[i], strlen(streams[i]) + 1)));
ASSERT_TRUE(stream_object);
const uint32_t stream_object_number = stream_object->GetObjNum();
ASSERT_GT(stream_object_number, 0u);
@@ -219,9 +217,8 @@
// Add a file stream to the embedded files dictionary.
RetainPtr<CPDF_Dictionary> file_dict = dict_obj->GetMutableDictFor("EF");
static constexpr char kHello[] = "hello";
- auto stream_object = object_holder.NewIndirect<CPDF_Stream>(
- DataVector<uint8_t>(std::begin(kHello), std::end(kHello)),
- pdfium::MakeRetain<CPDF_Dictionary>());
+ auto stream_object =
+ object_holder.NewIndirect<CPDF_Stream>(pdfium::as_byte_span(kHello));
ASSERT_TRUE(stream_object);
const uint32_t stream_object_number = stream_object->GetObjNum();
ASSERT_GT(stream_object_number, 0u);
diff --git a/core/fpdfdoc/cpdf_metadata_unittest.cpp b/core/fpdfdoc/cpdf_metadata_unittest.cpp
index 4bd30ed..0618fba 100644
--- a/core/fpdfdoc/cpdf_metadata_unittest.cpp
+++ b/core/fpdfdoc/cpdf_metadata_unittest.cpp
@@ -15,8 +15,8 @@
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(ByteStringView(data).raw_span());
+ auto stream =
+ pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream);
auto results = metadata.CheckForSharedForm();
@@ -32,8 +32,8 @@
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(ByteStringView(data).raw_span());
+ auto stream =
+ pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream);
auto results = metadata.CheckForSharedForm();
@@ -49,8 +49,8 @@
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(ByteStringView(data).raw_span());
+ auto stream =
+ pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream);
auto results = metadata.CheckForSharedForm();
@@ -66,8 +66,8 @@
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(ByteStringView(data).raw_span());
+ auto stream =
+ pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream);
auto results = metadata.CheckForSharedForm();
@@ -84,8 +84,8 @@
"</node>"
"</parent></grandparent>";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(ByteStringView(data).raw_span());
+ auto stream =
+ pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream);
auto results = metadata.CheckForSharedForm();
@@ -98,8 +98,8 @@
"<?xml charset=\"utf-8\"?>\n"
"<node></node>";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(ByteStringView(data).raw_span());
+ auto stream =
+ pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream);
auto results = metadata.CheckForSharedForm();
@@ -131,8 +131,8 @@
"</node>"
"</parent>";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(ByteStringView(kData).raw_span());
+ auto stream =
+ pdfium::MakeRetain<CPDF_Stream>(ByteStringView(kData).raw_span());
CPDF_Metadata metadata(stream);
auto results = metadata.CheckForSharedForm();
@@ -147,8 +147,8 @@
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(ByteStringView(data).raw_span());
+ auto stream =
+ pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream);
auto results = metadata.CheckForSharedForm();
@@ -177,8 +177,8 @@
"</node3>"
"</grandparent>";
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(ByteStringView(data).raw_span());
+ auto stream =
+ pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream);
auto results = metadata.CheckForSharedForm();
diff --git a/fpdfsdk/fpdf_edittext.cpp b/fpdfsdk/fpdf_edittext.cpp
index ee8212a..90476e0 100644
--- a/fpdfsdk/fpdf_edittext.cpp
+++ b/fpdfsdk/fpdf_edittext.cpp
@@ -125,15 +125,14 @@
pFontDesc->SetNewFor<CPDF_Number>("CapHeight", pFont->GetAscent());
pFontDesc->SetNewFor<CPDF_Number>("StemV", pFont->IsBold() ? 120 : 70);
- auto pStream = pDoc->NewIndirect<CPDF_Stream>();
- pStream->SetData(span);
+ auto stream = pDoc->NewIndirect<CPDF_Stream>(span);
// TODO(npm): Lengths for Type1 fonts.
if (font_type == FPDF_FONT_TRUETYPE) {
- pStream->GetMutableDict()->SetNewFor<CPDF_Number>(
+ stream->GetMutableDict()->SetNewFor<CPDF_Number>(
"Length1", static_cast<int>(span.size()));
}
ByteString fontFile = font_type == FPDF_FONT_TYPE1 ? "FontFile" : "FontFile2";
- pFontDesc->SetNewFor<CPDF_Reference>(fontFile, pDoc, pStream->GetObjNum());
+ pFontDesc->SetNewFor<CPDF_Reference>(fontFile, pDoc, stream->GetObjNum());
return pFontDesc;
}
@@ -289,8 +288,7 @@
buffer << "endbfrange\n";
buffer << ToUnicodeEnd;
// TODO(npm): Encrypt / Compress?
- auto stream = pDoc->NewIndirect<CPDF_Stream>();
- stream->SetDataFromStringstream(&buffer);
+ auto stream = pDoc->NewIndirect<CPDF_Stream>(&buffer);
return stream;
}
diff --git a/fpdfsdk/fpdf_save.cpp b/fpdfsdk/fpdf_save.cpp
index 37a1905..0d771d2 100644
--- a/fpdfsdk/fpdf_save.cpp
+++ b/fpdfsdk/fpdf_save.cpp
@@ -111,18 +111,18 @@
pdfium::MakeRetain<CFX_MemoryStream>();
if (pContext->SaveDatasetsPackage(pFileWrite) &&
pFileWrite->GetSize() > 0) {
- auto pDataDict = pPDFDocument->New<CPDF_Dictionary>();
if (iDataSetsIndex != -1) {
if (pDataSetsStream) {
- pDataSetsStream->InitStreamFromFile(pFileWrite, std::move(pDataDict));
+ pDataSetsStream->InitStreamFromFile(
+ pFileWrite, pPDFDocument->New<CPDF_Dictionary>());
}
} else {
- auto pData = pPDFDocument->NewIndirect<CPDF_Stream>();
- pData->InitStreamFromFile(pFileWrite, std::move(pDataDict));
+ auto data_stream = pPDFDocument->NewIndirect<CPDF_Stream>(
+ pFileWrite, pPDFDocument->New<CPDF_Dictionary>());
int iLast = fxcrt::CollectionSize<int>(*pArray) - 2;
pArray->InsertNewAt<CPDF_String>(iLast, "datasets", false);
pArray->InsertNewAt<CPDF_Reference>(iLast + 1, pPDFDocument,
- pData->GetObjNum());
+ data_stream->GetObjNum());
}
fileList->push_back(std::move(pFileWrite));
}
@@ -132,17 +132,18 @@
RetainPtr<IFX_SeekableStream> pFileWrite =
pdfium::MakeRetain<CFX_MemoryStream>();
if (pContext->SaveFormPackage(pFileWrite) && pFileWrite->GetSize() > 0) {
- auto pDataDict = pPDFDocument->New<CPDF_Dictionary>();
if (iFormIndex != -1) {
- if (pFormStream)
- pFormStream->InitStreamFromFile(pFileWrite, std::move(pDataDict));
+ if (pFormStream) {
+ pFormStream->InitStreamFromFile(pFileWrite,
+ pPDFDocument->New<CPDF_Dictionary>());
+ }
} else {
- auto pData = pPDFDocument->NewIndirect<CPDF_Stream>();
- pData->InitStreamFromFile(pFileWrite, std::move(pDataDict));
+ auto data_stream = pPDFDocument->NewIndirect<CPDF_Stream>(
+ pFileWrite, pPDFDocument->New<CPDF_Dictionary>());
int iLast = fxcrt::CollectionSize<int>(*pArray) - 2;
pArray->InsertNewAt<CPDF_String>(iLast, "form", false);
pArray->InsertNewAt<CPDF_Reference>(iLast + 1, pPDFDocument,
- pData->GetObjNum());
+ data_stream->GetObjNum());
}
fileList->push_back(std::move(pFileWrite));
}
diff --git a/testing/fuzzers/pdf_cpdf_tounicodemap_fuzzer.cc b/testing/fuzzers/pdf_cpdf_tounicodemap_fuzzer.cc
index 5f18564..9040eff 100644
--- a/testing/fuzzers/pdf_cpdf_tounicodemap_fuzzer.cc
+++ b/testing/fuzzers/pdf_cpdf_tounicodemap_fuzzer.cc
@@ -28,8 +28,7 @@
std::vector<uint8_t> remaining =
data_provider.ConsumeRemainingBytes<uint8_t>();
- auto stream = pdfium::MakeRetain<CPDF_Stream>();
- stream->SetData(remaining);
+ auto stream = pdfium::MakeRetain<CPDF_Stream>(remaining);
auto to_unicode_map = std::make_unique<CPDF_ToUnicodeMap>(std::move(stream));
to_unicode_map->Lookup(charcode_to_lookup);