Use FixedSizeDataVector instead of DataVector in cpdf_creator.cpp Switch to FixedSizeDataVector since the vector size never changes and the vector does not need to initialized. Change-Id: I4db5d2c19466a0a2154ee4220e017153c186da9e Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/119328 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_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp index a3f1072..000df08 100644 --- a/core/fpdfapi/edit/cpdf_creator.cpp +++ b/core/fpdfapi/edit/cpdf_creator.cpp
@@ -26,7 +26,7 @@ #include "core/fpdfapi/parser/object_tree_traversal_util.h" #include "core/fxcrt/check.h" #include "core/fxcrt/containers/contains.h" -#include "core/fxcrt/data_vector.h" +#include "core/fxcrt/fixed_size_data_vector.h" #include "core/fxcrt/fx_extension.h" #include "core/fxcrt/fx_random.h" #include "core/fxcrt/fx_safe_types.h" @@ -50,15 +50,15 @@ bool Flush(); FX_FILESIZE offset_ = 0; - DataVector<uint8_t> buffer_; + FixedSizeDataVector<uint8_t> buffer_; pdfium::raw_span<uint8_t> available_; RetainPtr<IFX_RetainableWriteStream> const backing_file_; }; CFX_FileBufferArchive::CFX_FileBufferArchive( RetainPtr<IFX_RetainableWriteStream> file) - : buffer_(kArchiveBufferSize), - available_(buffer_), + : buffer_(FixedSizeDataVector<uint8_t>::Uninit(kArchiveBufferSize)), + available_(buffer_.span()), backing_file_(std::move(file)) { DCHECK(backing_file_); } @@ -68,11 +68,9 @@ } bool CFX_FileBufferArchive::Flush() { - size_t nUsed = buffer_.size() - available_.size(); - available_ = pdfium::make_span(buffer_); - if (!nUsed) - return true; - return backing_file_->WriteBlock(available_.first(nUsed)); + size_t used = buffer_.size() - available_.size(); + available_ = buffer_.span(); + return used == 0 || backing_file_->WriteBlock(available_.first(used)); } bool CFX_FileBufferArchive::WriteBlock(pdfium::span<const uint8_t> buffer) {