Return DataVector<uint8_t> from CPDF_StreamAcc::ComputeDigest().

Stop storing binary data in bytestrings, and remove the corresponding
UNSAFE_BUFFERS() required for a two-arg constructor.

Bug: 42271176
Change-Id: I2d9458f8fa4ab7a9574e6cadf19f944860504f29
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/120571
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp
index 2996701..92ead13 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.cpp
+++ b/core/fpdfapi/page/cpdf_docpagedata.cpp
@@ -178,10 +178,14 @@
   }
 }
 
-CPDF_DocPageData::HashIccProfileKey::HashIccProfileKey(ByteString digest,
-                                                       uint32_t components)
+CPDF_DocPageData::HashIccProfileKey::HashIccProfileKey(
+    DataVector<uint8_t> digest,
+    uint32_t components)
     : digest(std::move(digest)), components(components) {}
 
+CPDF_DocPageData::HashIccProfileKey::HashIccProfileKey(
+    const HashIccProfileKey& that) = default;
+
 CPDF_DocPageData::HashIccProfileKey::~HashIccProfileKey() = default;
 
 bool CPDF_DocPageData::HashIccProfileKey::operator<(
diff --git a/core/fpdfapi/page/cpdf_docpagedata.h b/core/fpdfapi/page/cpdf_docpagedata.h
index 25e276a..ef03f16 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.h
+++ b/core/fpdfapi/page/cpdf_docpagedata.h
@@ -15,6 +15,7 @@
 #include "core/fpdfapi/page/cpdf_colorspace.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fxcrt/bytestring.h"
+#include "core/fxcrt/data_vector.h"
 #include "core/fxcrt/fx_codepage_forward.h"
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -88,12 +89,13 @@
 
  private:
   struct HashIccProfileKey {
-    HashIccProfileKey(ByteString digest, uint32_t components);
+    HashIccProfileKey(DataVector<uint8_t> digest, uint32_t components);
+    HashIccProfileKey(const HashIccProfileKey& that);
     ~HashIccProfileKey();
 
     bool operator<(const HashIccProfileKey& other) const;
 
-    ByteString digest;
+    DataVector<uint8_t> digest;
     uint32_t components;
   };
 
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.cpp b/core/fpdfapi/parser/cpdf_stream_acc.cpp
index 1658a01..b7d9aec 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.cpp
+++ b/core/fpdfapi/parser/cpdf_stream_acc.cpp
@@ -84,11 +84,11 @@
   return m_pStream ? m_pStream->KeyForCache() : 0;
 }
 
-ByteString CPDF_StreamAcc::ComputeDigest() const {
-  uint8_t digest[20];
+DataVector<uint8_t> CPDF_StreamAcc::ComputeDigest() const {
+  DataVector<uint8_t> digest(20);
   pdfium::span<const uint8_t> span = GetSpan();
   CRYPT_SHA1Generate(span.data(), span.size(), digest);
-  return UNSAFE_TODO(ByteString::Create(digest, 20));
+  return digest;
 }
 
 DataVector<uint8_t> CPDF_StreamAcc::DetachData() {
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.h b/core/fpdfapi/parser/cpdf_stream_acc.h
index d435150..3ddc5ac 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.h
+++ b/core/fpdfapi/parser/cpdf_stream_acc.h
@@ -39,7 +39,7 @@
   uint32_t GetSize() const;
   pdfium::span<const uint8_t> GetSpan() const;
   uint64_t KeyForCache() const;
-  ByteString ComputeDigest() const;
+  DataVector<uint8_t> ComputeDigest() const;
   ByteString GetImageDecoder() const { return m_ImageDecoder; }
   DataVector<uint8_t> DetachData();