summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_read_validator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/parser/cpdf_read_validator.cpp')
-rw-r--r--core/fpdfapi/parser/cpdf_read_validator.cpp24
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;
+}