diff options
Diffstat (limited to 'core/fpdfapi/parser/cpdf_read_validator.cpp')
-rw-r--r-- | core/fpdfapi/parser/cpdf_read_validator.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/core/fpdfapi/parser/cpdf_read_validator.cpp b/core/fpdfapi/parser/cpdf_read_validator.cpp index be20f18f33..d01b3c61e6 100644 --- a/core/fpdfapi/parser/cpdf_read_validator.cpp +++ b/core/fpdfapi/parser/cpdf_read_validator.cpp @@ -84,6 +84,13 @@ FX_FILESIZE CPDF_ReadValidator::GetSize() { } void CPDF_ReadValidator::ScheduleDownload(FX_FILESIZE offset, size_t size) { + const FX_SAFE_UINT32 safe_size = size; + if (safe_size.IsValid()) + ScheduleDataDownload(offset, safe_size.ValueOrDie()); +} + +void CPDF_ReadValidator::ScheduleDataDownload(FX_FILESIZE offset, + uint32_t size) { if (!hints_ || size == 0) return; @@ -105,3 +112,20 @@ void CPDF_ReadValidator::ScheduleDownload(FX_FILESIZE offset, size_t size) { } hints_->AddSegment(start_segment_offset, segment_size.ValueOrDie()); } + +void CPDF_ReadValidator::ScheduleDownloadWholeFile() { + const FX_SAFE_UINT32 safe_size = GetSize(); + if (safe_size.IsValid()) + ScheduleDataDownload(0, safe_size.ValueOrDie()); +} + +bool CPDF_ReadValidator::IsDataRangeAvailable(FX_FILESIZE offset, + uint32_t size) const { + return !file_avail_ || file_avail_->IsDataAvail(offset, size); +} + +bool CPDF_ReadValidator::IsWholeFileAvailable() { + const FX_SAFE_UINT32 safe_size = GetSize(); + return safe_size.IsValid() ? IsDataRangeAvailable(0, safe_size.ValueOrDie()) + : false; +} |