Break dependence of fpdfapi/page on fxcrt/fdrm.
Give CPDF_StreamAcc a new method to do the work of computing
a digest that was formerly being done in the page layer.
CPDF_StreamAcc is part of the parser layer, which already has
access to fdrm for several other code paths.
Change-Id: Icb249ee59e34b1475804849b0f42329c1a1499af
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/58555
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/BUILD.gn b/core/fpdfapi/page/BUILD.gn
index 17e2b6e..e853773 100644
--- a/core/fpdfapi/page/BUILD.gn
+++ b/core/fpdfapi/page/BUILD.gn
@@ -101,7 +101,6 @@
configs += [ "../../../:pdfium_core_config" ]
deps = [
"../../../constants",
- "../../fdrm",
"../../fxcodec",
"../../fxcrt",
"../../fxge",
diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp
index 908f081..0c97af3 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.cpp
+++ b/core/fpdfapi/page/cpdf_docpagedata.cpp
@@ -13,7 +13,6 @@
#include <vector>
#include "build/build_config.h"
-#include "core/fdrm/fx_crypt.h"
#include "core/fpdfapi/font/cpdf_type1font.h"
#include "core/fpdfapi/page/cpdf_form.h"
#include "core/fpdfapi/page/cpdf_iccprofile.h"
@@ -388,10 +387,7 @@
auto pAccessor = pdfium::MakeRetain<CPDF_StreamAcc>(pProfileStream);
pAccessor->LoadAllDataFiltered();
- uint8_t digest[20];
- CRYPT_SHA1Generate(pAccessor->GetData(), pAccessor->GetSize(), digest);
-
- ByteString bsDigest(digest, 20);
+ ByteString bsDigest = pAccessor->ComputeDigest();
auto hash_it = m_HashProfileMap.find(bsDigest);
if (hash_it != m_HashProfileMap.end()) {
auto it_copied_stream = m_IccProfileMap.find(hash_it->second.Get());
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.cpp b/core/fpdfapi/parser/cpdf_stream_acc.cpp
index c666ad7..93a2d85 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.cpp
+++ b/core/fpdfapi/parser/cpdf_stream_acc.cpp
@@ -9,6 +9,7 @@
#include <utility>
#include <vector>
+#include "core/fdrm/fx_crypt.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
#include "core/fpdfapi/parser/fpdf_parser_decode.h"
@@ -70,6 +71,12 @@
: 0;
}
+ByteString CPDF_StreamAcc::ComputeDigest() const {
+ uint8_t digest[20];
+ CRYPT_SHA1Generate(GetData(), GetSize(), digest);
+ return ByteString(digest, 20);
+}
+
std::unique_ptr<uint8_t, FxFreeDeleter> CPDF_StreamAcc::DetachData() {
if (m_pData.IsOwned()) {
std::unique_ptr<uint8_t, FxFreeDeleter> p = m_pData.ReleaseAndClear();
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.h b/core/fpdfapi/parser/cpdf_stream_acc.h
index 2575427..cc1f632 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.h
+++ b/core/fpdfapi/parser/cpdf_stream_acc.h
@@ -39,6 +39,7 @@
pdfium::span<uint8_t> GetSpan() const {
return pdfium::make_span(GetData(), GetSize());
}
+ ByteString ComputeDigest() const;
ByteString GetImageDecoder() const { return m_ImageDecoder; }
const CPDF_Dictionary* GetImageParam() const { return m_pImageParam.Get(); }
std::unique_ptr<uint8_t, FxFreeDeleter> DetachData();
@@ -48,7 +49,6 @@
~CPDF_StreamAcc() override;
void LoadAllData(bool bRawAccess, uint32_t estimated_size, bool bImageAcc);
-
void ProcessRawData();
void ProcessFilteredData(uint32_t estimated_size, bool bImageAcc);