Use span in TestLoader.

Also change |EmbedderTest::loader_| to unique_ptr.

Change-Id: Ib9d42b6eada6716809b46b1bb8585c4c5f4d6df0
Reviewed-on: https://pdfium-review.googlesource.com/c/49990
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc
index 69f5118..c536bc8 100644
--- a/samples/pdfium_test.cc
+++ b/samples/pdfium_test.cc
@@ -696,7 +696,7 @@
                size_t len,
                const Options& options,
                const std::string& events) {
-  TestLoader loader(pBuf, len);
+  TestLoader loader({pBuf, len});
 
   FPDF_FILEACCESS file_access = {};
   file_access.m_FileLen = static_cast<unsigned long>(len);
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index cdc10aa..febd4f2 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -93,7 +93,7 @@
 
   FPDFAvail_Destroy(avail_);
   FPDF_DestroyLibrary();
-  delete loader_;
+  loader_.reset();
 }
 
 #ifdef PDF_ENABLE_V8
@@ -150,12 +150,13 @@
     return false;
 
   EXPECT_TRUE(!loader_);
-  loader_ = new TestLoader(file_contents_.get(), file_length_);
+  loader_ = pdfium::MakeUnique<TestLoader>(
+      pdfium::make_span(file_contents_.get(), file_length_));
 
   memset(&file_access_, 0, sizeof(file_access_));
   file_access_.m_FileLen = static_cast<unsigned long>(file_length_);
   file_access_.m_GetBlock = TestLoader::GetBlock;
-  file_access_.m_Param = loader_;
+  file_access_.m_Param = loader_.get();
 
   fake_file_access_ = pdfium::MakeUnique<FakeFileAccess>(&file_access_);
   return OpenDocumentHelper(password, linearize_option, javascript_option,
diff --git a/testing/embedder_test.h b/testing/embedder_test.h
index 8a0733f..ce19b88 100644
--- a/testing/embedder_test.h
+++ b/testing/embedder_test.h
@@ -225,7 +225,7 @@
   std::unique_ptr<FakeFileAccess> fake_file_access_;  // must outlive |avail_|.
 
   void* external_isolate_ = nullptr;
-  TestLoader* loader_ = nullptr;
+  std::unique_ptr<TestLoader> loader_;
   size_t file_length_ = 0;
   std::unique_ptr<char, pdfium::FreeDeleter> file_contents_;
   PageNumberToHandleMap page_map_;
diff --git a/testing/fuzzers/pdfium_fuzzer_helper.cc b/testing/fuzzers/pdfium_fuzzer_helper.cc
index f128d8a..75dc7dd 100644
--- a/testing/fuzzers/pdfium_fuzzer_helper.cc
+++ b/testing/fuzzers/pdfium_fuzzer_helper.cc
@@ -138,7 +138,7 @@
   form_callbacks.version = GetFormCallbackVersion();
   form_callbacks.m_pJsPlatform = &platform_callbacks;
 
-  TestLoader loader(pBuf, len);
+  TestLoader loader({pBuf, len});
   FPDF_FILEACCESS file_access;
   memset(&file_access, '\0', sizeof(file_access));
   file_access.m_FileLen = static_cast<unsigned long>(len);
diff --git a/testing/test_loader.cpp b/testing/test_loader.cpp
index 0bc5153..33ee331 100644
--- a/testing/test_loader.cpp
+++ b/testing/test_loader.cpp
@@ -8,8 +8,7 @@
 
 #include "third_party/base/logging.h"
 
-TestLoader::TestLoader(const char* pBuf, size_t len)
-    : m_pBuf(pBuf), m_Len(len) {}
+TestLoader::TestLoader(pdfium::span<const char> span) : m_Span(span) {}
 
 // static
 int TestLoader::GetBlock(void* param,
@@ -17,11 +16,11 @@
                          unsigned char* pBuf,
                          unsigned long size) {
   TestLoader* pLoader = static_cast<TestLoader*>(param);
-  if (pos + size < pos || pos + size > pLoader->m_Len) {
+  if (pos + size < pos || pos + size > pLoader->m_Span.size()) {
     NOTREACHED();
     return 0;
   }
 
-  memcpy(pBuf, pLoader->m_pBuf + pos, size);
+  memcpy(pBuf, &pLoader->m_Span[pos], size);
   return 1;
 }
diff --git a/testing/test_loader.h b/testing/test_loader.h
index ed01f6c..17ca9e9 100644
--- a/testing/test_loader.h
+++ b/testing/test_loader.h
@@ -5,19 +5,19 @@
 #ifndef TESTING_TEST_LOADER_H_
 #define TESTING_TEST_LOADER_H_
 
-#include <stdlib.h>
+#include "third_party/base/span.h"
 
 class TestLoader {
  public:
-  TestLoader(const char* pBuf, size_t len);
+  explicit TestLoader(pdfium::span<const char> span);
+
   static int GetBlock(void* param,
                       unsigned long pos,
                       unsigned char* pBuf,
                       unsigned long size);
 
  private:
-  const char* const m_pBuf;
-  const size_t m_Len;
+  const pdfium::span<const char> m_Span;
 };
 
 #endif  // TESTING_TEST_LOADER_H_