Apply pdfium_noshorten_config to fpdfapi/edit
Unfortunately, hard to avoid checked casts when moving between
indices and stream object numbers.
Change-Id: If506e024d8a75b398eca3a822f762d1ae835a224
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/91370
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/edit/BUILD.gn b/core/fpdfapi/edit/BUILD.gn
index f0d42c8..72f17cb 100644
--- a/core/fpdfapi/edit/BUILD.gn
+++ b/core/fpdfapi/edit/BUILD.gn
@@ -18,7 +18,10 @@
"cpdf_stringarchivestream.cpp",
"cpdf_stringarchivestream.h",
]
- configs += [ "../../../:pdfium_strict_config" ]
+ configs += [
+ "../../../:pdfium_strict_config",
+ "../../../:pdfium_noshorten_config",
+ ]
deps = [
"../../../constants",
"../../../third_party:skia_shared",
diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp
index af0ecb3..9d60e85 100644
--- a/core/fpdfapi/edit/cpdf_creator.cpp
+++ b/core/fpdfapi/edit/cpdf_creator.cpp
@@ -247,10 +247,10 @@
FX_FILESIZE src_size = m_SavedOffset;
m_pParser->GetSyntax()->SetPos(0);
while (src_size) {
- const FX_FILESIZE block_size = std::min(kBufferSize, src_size);
- if (!m_pParser->GetSyntax()->ReadBlock(buffer.data(), block_size)) {
+ const uint32_t block_size =
+ static_cast<uint32_t>(std::min(kBufferSize, src_size));
+ if (!m_pParser->GetSyntax()->ReadBlock(buffer.data(), block_size))
return Stage::kInvalid;
- }
if (!m_Archive->WriteBlock(buffer.data(), block_size))
return Stage::kInvalid;
@@ -516,8 +516,8 @@
return Stage::kInvalid;
}
} else {
- size_t count = m_NewObjNumArray.size();
- size_t i = 0;
+ int count = fxcrt::CollectionSize<int>(m_NewObjNumArray);
+ int i = 0;
for (i = 0; i < count; i++) {
if (!m_Archive->WriteDWord(m_NewObjNumArray[i]) ||
!m_Archive->WriteString(" 1 ")) {
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index 3f205f8..6f694bf 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -40,6 +40,7 @@
#include "third_party/base/check.h"
#include "third_party/base/containers/contains.h"
#include "third_party/base/notreached.h"
+#include "third_party/base/numerics/safe_conversions.h"
#include "third_party/base/span.h"
namespace {
@@ -154,7 +155,8 @@
fxcrt::ostringstream* buf = &pair.second;
if (stream_index == CPDF_PageObject::kNoContentStream) {
- int new_stream_index = page_content_manager.AddStream(buf);
+ int new_stream_index =
+ pdfium::base::checked_cast<int>(page_content_manager.AddStream(buf));
UpdateStreamlessPageObjects(new_stream_index);
continue;
}
diff --git a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
index 9cb9f31..3a2d1f5 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
@@ -17,6 +17,7 @@
#include "core/fpdfapi/parser/cpdf_stream.h"
#include "third_party/base/check.h"
#include "third_party/base/containers/adapters.h"
+#include "third_party/base/numerics/safe_conversions.h"
CPDF_PageContentManager::CPDF_PageContentManager(
const CPDF_PageObjectHolder* obj_holder)
@@ -132,14 +133,15 @@
// Create a mapping from the old to the new stream indexes, shifted due to
// the deletion of the |streams_to_remove_|.
- std::map<int32_t, size_t> stream_index_mapping;
+ std::map<size_t, size_t> stream_index_mapping;
for (size_t i = 0; i < streams_left.size(); ++i)
stream_index_mapping[streams_left[i]] = i;
// Update the page objects' content stream indexes.
for (const auto& obj : *obj_holder_) {
int32_t old_stream_index = obj->GetContentStream();
- size_t new_stream_index = stream_index_mapping[old_stream_index];
+ int32_t new_stream_index = pdfium::base::checked_cast<int32_t>(
+ stream_index_mapping[old_stream_index]);
obj->SetContentStream(new_stream_index);
}