Widen some uint32_t to size_t in CPDF_Stream
Still need a checked cast, however, when setting /Length as it
is unclear what the limit might be.
Change-Id: I0feae83e5ca3d6ca847b502b88102ebcb0fa99c7
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/91150
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp
index 1ef1cdf..7fd6556 100644
--- a/core/fpdfapi/parser/cpdf_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_stream.cpp
@@ -42,7 +42,7 @@
}
CPDF_Stream::CPDF_Stream(std::unique_ptr<uint8_t, FxFreeDeleter> pData,
- uint32_t size,
+ size_t size,
RetainPtr<CPDF_Dictionary> pDict)
: m_pDict(std::move(pDict)) {
TakeData(std::move(pData), size);
@@ -147,14 +147,15 @@
}
void CPDF_Stream::TakeData(std::unique_ptr<uint8_t, FxFreeDeleter> pData,
- uint32_t size) {
+ size_t size) {
m_bMemoryBased = true;
m_pFile = nullptr;
m_pDataBuf = std::move(pData);
m_dwSize = size;
if (!m_pDict)
m_pDict = pdfium::MakeRetain<CPDF_Dictionary>();
- m_pDict->SetNewFor<CPDF_Number>("Length", static_cast<int>(size));
+ m_pDict->SetNewFor<CPDF_Number>("Length",
+ pdfium::base::checked_cast<int>(size));
}
void CPDF_Stream::SetDataFromStringstream(fxcrt::ostringstream* stream) {
@@ -168,7 +169,7 @@
bool CPDF_Stream::ReadRawData(FX_FILESIZE offset,
uint8_t* buf,
- uint32_t size) const {
+ size_t size) const {
if (!m_bMemoryBased && m_pFile)
return m_pFile->ReadBlockAtOffset(buf, offset, size);
diff --git a/core/fpdfapi/parser/cpdf_stream.h b/core/fpdfapi/parser/cpdf_stream.h
index eaf2696..497db20 100644
--- a/core/fpdfapi/parser/cpdf_stream.h
+++ b/core/fpdfapi/parser/cpdf_stream.h
@@ -34,20 +34,19 @@
bool WriteTo(IFX_ArchiveStream* archive,
const CPDF_Encryptor* encryptor) const override;
- uint32_t GetRawSize() const { return m_dwSize; }
+ size_t GetRawSize() const { return m_dwSize; }
// Will be null in case when stream is not memory based.
// Use CPDF_StreamAcc to data access in all cases.
uint8_t* GetInMemoryRawData() const { return m_pDataBuf.get(); }
- // Copies span into internally-owned buffer.
+ // Copies span or stream into internally-owned buffer.
void SetData(pdfium::span<const uint8_t> pData);
-
- void TakeData(std::unique_ptr<uint8_t, FxFreeDeleter> pData, uint32_t size);
-
void SetDataFromStringstream(fxcrt::ostringstream* stream);
+ void TakeData(std::unique_ptr<uint8_t, FxFreeDeleter> pData, size_t size);
+
// Set data and remove "Filter" and "DecodeParms" fields from stream
- // dictionary.
+ // dictionary. Copies span or stream into internally-owned buffer.
void SetDataAndRemoveFilter(pdfium::span<const uint8_t> pData);
void SetDataFromStringstreamAndRemoveFilter(fxcrt::ostringstream* stream);
@@ -56,7 +55,7 @@
void InitStreamFromFile(const RetainPtr<IFX_SeekableReadStream>& pFile,
RetainPtr<CPDF_Dictionary> pDict);
- bool ReadRawData(FX_FILESIZE offset, uint8_t* pBuf, uint32_t buf_size) const;
+ bool ReadRawData(FX_FILESIZE offset, uint8_t* pBuf, size_t buf_size) const;
bool IsMemoryBased() const { return m_bMemoryBased; }
bool HasFilter() const;
@@ -66,7 +65,7 @@
CPDF_Stream(pdfium::span<const uint8_t> pData,
RetainPtr<CPDF_Dictionary> pDict);
CPDF_Stream(std::unique_ptr<uint8_t, FxFreeDeleter> pData,
- uint32_t size,
+ size_t size,
RetainPtr<CPDF_Dictionary> pDict);
~CPDF_Stream() override;
@@ -75,7 +74,7 @@
std::set<const CPDF_Object*>* pVisited) const override;
bool m_bMemoryBased = true;
- uint32_t m_dwSize = 0;
+ size_t m_dwSize = 0;
RetainPtr<CPDF_Dictionary> m_pDict;
std::unique_ptr<uint8_t, FxFreeDeleter> m_pDataBuf;
RetainPtr<IFX_SeekableReadStream> m_pFile;