Spanify FileAccessIface.

Avoid two-arg functions that should theoretically be marked as
UNSAFE_BUFFER_USAGE.

Change-Id: Id4d43380a813df1516c81826eb4b374b0af8b7c1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/120173
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
diff --git a/core/fxcrt/cfx_fileaccess_posix.cpp b/core/fxcrt/cfx_fileaccess_posix.cpp
index c9f5ce3..9844e67 100644
--- a/core/fxcrt/cfx_fileaccess_posix.cpp
+++ b/core/fxcrt/cfx_fileaccess_posix.cpp
@@ -73,20 +73,19 @@
   }
   return lseek(m_nFD, pos, SEEK_SET);
 }
-size_t CFX_FileAccess_Posix::Read(void* pBuffer, size_t szBuffer) {
+size_t CFX_FileAccess_Posix::Read(pdfium::span<uint8_t> buffer) {
   if (m_nFD < 0) {
     return 0;
   }
-  return read(m_nFD, pBuffer, szBuffer);
+  return read(m_nFD, buffer.data(), buffer.size());
 }
-size_t CFX_FileAccess_Posix::Write(const void* pBuffer, size_t szBuffer) {
+size_t CFX_FileAccess_Posix::Write(pdfium::span<const uint8_t> buffer) {
   if (m_nFD < 0) {
     return 0;
   }
-  return write(m_nFD, pBuffer, szBuffer);
+  return write(m_nFD, buffer.data(), buffer.size());
 }
-size_t CFX_FileAccess_Posix::ReadPos(void* pBuffer,
-                                     size_t szBuffer,
+size_t CFX_FileAccess_Posix::ReadPos(pdfium::span<uint8_t> buffer,
                                      FX_FILESIZE pos) {
   if (m_nFD < 0) {
     return 0;
@@ -97,10 +96,9 @@
   if (SetPosition(pos) == (FX_FILESIZE)-1) {
     return 0;
   }
-  return Read(pBuffer, szBuffer);
+  return Read(buffer);
 }
-size_t CFX_FileAccess_Posix::WritePos(const void* pBuffer,
-                                      size_t szBuffer,
+size_t CFX_FileAccess_Posix::WritePos(pdfium::span<const uint8_t> buffer,
                                       FX_FILESIZE pos) {
   if (m_nFD < 0) {
     return 0;
@@ -108,7 +106,7 @@
   if (SetPosition(pos) == (FX_FILESIZE)-1) {
     return 0;
   }
-  return Write(pBuffer, szBuffer);
+  return Write(buffer);
 }
 
 bool CFX_FileAccess_Posix::Flush() {
diff --git a/core/fxcrt/cfx_fileaccess_posix.h b/core/fxcrt/cfx_fileaccess_posix.h
index fe02d99..c52b055 100644
--- a/core/fxcrt/cfx_fileaccess_posix.h
+++ b/core/fxcrt/cfx_fileaccess_posix.h
@@ -29,12 +29,10 @@
   FX_FILESIZE GetSize() const override;
   FX_FILESIZE GetPosition() const override;
   FX_FILESIZE SetPosition(FX_FILESIZE pos) override;
-  size_t Read(void* pBuffer, size_t szBuffer) override;
-  size_t Write(const void* pBuffer, size_t szBuffer) override;
-  size_t ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos) override;
-  size_t WritePos(const void* pBuffer,
-                  size_t szBuffer,
-                  FX_FILESIZE pos) override;
+  size_t Read(pdfium::span<uint8_t> buffer) override;
+  size_t Write(pdfium::span<const uint8_t> buffer) override;
+  size_t ReadPos(pdfium::span<uint8_t> buffer, FX_FILESIZE pos) override;
+  size_t WritePos(pdfium::span<const uint8_t> buffer, FX_FILESIZE pos) override;
   bool Flush() override;
   bool Truncate(FX_FILESIZE szFile) override;
 
diff --git a/core/fxcrt/cfx_fileaccess_windows.cpp b/core/fxcrt/cfx_fileaccess_windows.cpp
index 303fcd1..933bd4d 100644
--- a/core/fxcrt/cfx_fileaccess_windows.cpp
+++ b/core/fxcrt/cfx_fileaccess_windows.cpp
@@ -80,32 +80,31 @@
   return (FX_FILESIZE)newPos.QuadPart;
 }
 
-size_t CFX_FileAccess_Windows::Read(void* pBuffer, size_t szBuffer) {
+size_t CFX_FileAccess_Windows::Read(pdfium::span<uint8_t> buffer) {
   if (!m_hFile)
     return 0;
 
   size_t szRead = 0;
-  if (!::ReadFile(m_hFile, pBuffer, (DWORD)szBuffer, (LPDWORD)&szRead,
-                  nullptr)) {
+  if (!::ReadFile(m_hFile, buffer.data(), (DWORD)buffer.size(),
+                  (LPDWORD)&szRead, nullptr)) {
     return 0;
   }
   return szRead;
 }
 
-size_t CFX_FileAccess_Windows::Write(const void* pBuffer, size_t szBuffer) {
+size_t CFX_FileAccess_Windows::Write(pdfium::span<const uint8_t> buffer) {
   if (!m_hFile)
     return 0;
 
   size_t szWrite = 0;
-  if (!::WriteFile(m_hFile, pBuffer, (DWORD)szBuffer, (LPDWORD)&szWrite,
-                   nullptr)) {
+  if (!::WriteFile(m_hFile, buffer.data(), (DWORD)buffer.size(),
+                   (LPDWORD)&szWrite, nullptr)) {
     return 0;
   }
   return szWrite;
 }
 
-size_t CFX_FileAccess_Windows::ReadPos(void* pBuffer,
-                                       size_t szBuffer,
+size_t CFX_FileAccess_Windows::ReadPos(pdfium::span<uint8_t> buffer,
                                        FX_FILESIZE pos) {
   if (!m_hFile)
     return 0;
@@ -116,11 +115,10 @@
   if (SetPosition(pos) == (FX_FILESIZE)-1)
     return 0;
 
-  return Read(pBuffer, szBuffer);
+  return Read(buffer);
 }
 
-size_t CFX_FileAccess_Windows::WritePos(const void* pBuffer,
-                                        size_t szBuffer,
+size_t CFX_FileAccess_Windows::WritePos(pdfium::span<const uint8_t> buffer,
                                         FX_FILESIZE pos) {
   if (!m_hFile) {
     return 0;
@@ -128,7 +126,7 @@
   if (SetPosition(pos) == (FX_FILESIZE)-1) {
     return 0;
   }
-  return Write(pBuffer, szBuffer);
+  return Write(buffer);
 }
 
 bool CFX_FileAccess_Windows::Flush() {
diff --git a/core/fxcrt/cfx_fileaccess_windows.h b/core/fxcrt/cfx_fileaccess_windows.h
index 89c79e9..737e233 100644
--- a/core/fxcrt/cfx_fileaccess_windows.h
+++ b/core/fxcrt/cfx_fileaccess_windows.h
@@ -30,12 +30,10 @@
   FX_FILESIZE GetSize() const override;
   FX_FILESIZE GetPosition() const override;
   FX_FILESIZE SetPosition(FX_FILESIZE pos) override;
-  size_t Read(void* pBuffer, size_t szBuffer) override;
-  size_t Write(const void* pBuffer, size_t szBuffer) override;
-  size_t ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos) override;
-  size_t WritePos(const void* pBuffer,
-                  size_t szBuffer,
-                  FX_FILESIZE pos) override;
+  size_t Read(pdfium::span<uint8_t> buffer) override;
+  size_t Write(pdfium::span<const uint8_t> buffer) override;
+  size_t ReadPos(pdfium::span<uint8_t> buffer, FX_FILESIZE pos) override;
+  size_t WritePos(pdfium::span<const uint8_t> buffer, FX_FILESIZE pos) override;
   bool Flush() override;
   bool Truncate(FX_FILESIZE szFile) override;
 
diff --git a/core/fxcrt/fileaccess_iface.h b/core/fxcrt/fileaccess_iface.h
index 29aae63..72c40ea 100644
--- a/core/fxcrt/fileaccess_iface.h
+++ b/core/fxcrt/fileaccess_iface.h
@@ -10,6 +10,7 @@
 #include <memory>
 
 #include "core/fxcrt/fx_string.h"
+#include "core/fxcrt/span.h"
 
 class FileAccessIface {
  public:
@@ -22,11 +23,10 @@
   virtual FX_FILESIZE GetSize() const = 0;
   virtual FX_FILESIZE GetPosition() const = 0;
   virtual FX_FILESIZE SetPosition(FX_FILESIZE pos) = 0;
-  virtual size_t Read(void* pBuffer, size_t szBuffer) = 0;
-  virtual size_t Write(const void* pBuffer, size_t szBuffer) = 0;
-  virtual size_t ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos) = 0;
-  virtual size_t WritePos(const void* pBuffer,
-                          size_t szBuffer,
+  virtual size_t Read(pdfium::span<uint8_t> buffer) = 0;
+  virtual size_t Write(pdfium::span<const uint8_t> buffer) = 0;
+  virtual size_t ReadPos(pdfium::span<uint8_t> buffer, FX_FILESIZE pos) = 0;
+  virtual size_t WritePos(pdfium::span<const uint8_t> buffer,
                           FX_FILESIZE pos) = 0;
   virtual bool Flush() = 0;
   virtual bool Truncate(FX_FILESIZE szFile) = 0;
diff --git a/core/fxcrt/fx_stream.cpp b/core/fxcrt/fx_stream.cpp
index 0d8d047..55130bf 100644
--- a/core/fxcrt/fx_stream.cpp
+++ b/core/fxcrt/fx_stream.cpp
@@ -23,14 +23,14 @@
   FX_FILESIZE GetPosition() override { return m_pFile->GetPosition(); }
   bool ReadBlockAtOffset(pdfium::span<uint8_t> buffer,
                          FX_FILESIZE offset) override {
-    return m_pFile->ReadPos(buffer.data(), buffer.size(), offset) > 0;
+    return m_pFile->ReadPos(buffer, offset) > 0;
   }
   size_t ReadBlock(pdfium::span<uint8_t> buffer) override {
-    return m_pFile->Read(buffer.data(), buffer.size());
+    return m_pFile->Read(buffer);
   }
   bool WriteBlockAtOffset(pdfium::span<const uint8_t> buffer,
                           FX_FILESIZE offset) override {
-    return !!m_pFile->WritePos(buffer.data(), buffer.size(), offset);
+    return !!m_pFile->WritePos(buffer, offset);
   }
   bool Flush() override { return m_pFile->Flush(); }