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(); }