0

Modernize pdfium_engine_exports.cc

- Load PDFs with FPDF_LoadMemDocument64(), which can handle sizes above
  INT_MAX.
- Use base::Value's default ctor instead of explicitly constructing
  values of size none.
- Use `= default`.

Change-Id: I5e8f8a4cda38149ff10cd434de485d199d83578b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4865336
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Reviewed-by: Andy Phan <andyphan@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1196652}
This commit is contained in:
Lei Zhang
2023-09-14 16:51:56 +00:00
committed by Chromium LUCI CQ
parent eff0876fc0
commit 52ea00893e

@ -9,7 +9,6 @@
#include "base/functional/bind.h"
#include "base/no_destructor.h"
#include "base/numerics/safe_conversions.h"
#include "build/build_config.h"
#include "pdf/pdfium/pdfium_api_string_buffer_adapter.h"
#include "pdf/pdfium/pdfium_mem_buffer_file_write.h"
@ -108,10 +107,8 @@ int CalculatePosition(FPDF_PAGE page,
}
ScopedFPDFDocument LoadPdfData(base::span<const uint8_t> pdf_buffer) {
if (!base::IsValueInRangeForNumericType<int>(pdf_buffer.size()))
return nullptr;
return ScopedFPDFDocument(
FPDF_LoadMemDocument(pdf_buffer.data(), pdf_buffer.size(), nullptr));
return ScopedFPDFDocument(FPDF_LoadMemDocument64(
pdf_buffer.data(), pdf_buffer.size(), /*password=*/nullptr));
}
ScopedFPDFDocument CreatePdfDoc(
@ -152,13 +149,13 @@ int GetRenderFlagsFromSettings(
base::Value RecursiveGetStructTree(FPDF_STRUCTELEMENT struct_elem) {
int children_count = FPDF_StructElement_CountChildren(struct_elem);
if (children_count <= 0)
return base::Value(base::Value::Type::NONE);
return base::Value();
absl::optional<std::u16string> opt_type =
CallPDFiumWideStringBufferApiAndReturnOptional(
base::BindRepeating(FPDF_StructElement_GetType, struct_elem), true);
if (!opt_type)
return base::Value(base::Value::Type::NONE);
return base::Value();
base::Value::Dict result;
result.Set("type", *opt_type);
@ -224,9 +221,9 @@ PDFEngineExports* PDFEngineExports::Get() {
return exports.get();
}
PDFiumEngineExports::PDFiumEngineExports() {}
PDFiumEngineExports::PDFiumEngineExports() = default;
PDFiumEngineExports::~PDFiumEngineExports() {}
PDFiumEngineExports::~PDFiumEngineExports() = default;
#if BUILDFLAG(IS_CHROMEOS)
std::vector<uint8_t> PDFiumEngineExports::CreateFlattenedPdf(
@ -432,25 +429,25 @@ base::Value PDFiumEngineExports::GetPDFStructTreeForPage(
ScopedUnsupportedFeature::kNoEngine);
ScopedFPDFDocument doc = LoadPdfData(pdf_buffer);
if (!doc)
return base::Value(base::Value::Type::NONE);
return base::Value();
ScopedFPDFPage page(FPDF_LoadPage(doc.get(), page_index));
if (!page)
return base::Value(base::Value::Type::NONE);
return base::Value();
ScopedFPDFStructTree struct_tree(FPDF_StructTree_GetForPage(page.get()));
if (!struct_tree)
return base::Value(base::Value::Type::NONE);
return base::Value();
// We only expect one child of the struct tree - i.e. a single root node.
int children = FPDF_StructTree_CountChildren(struct_tree.get());
if (children != 1)
return base::Value(base::Value::Type::NONE);
return base::Value();
FPDF_STRUCTELEMENT struct_root_elem =
FPDF_StructTree_GetChildAtIndex(struct_tree.get(), 0);
if (!struct_root_elem)
return base::Value(base::Value::Type::NONE);
return base::Value();
return RecursiveGetStructTree(struct_root_elem);
}