#include "core/fpdfapi/parser/cpdf_data_avail.h"
#include <algorithm>
#include <memory>
#include <utility>
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_cross_ref_avail.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_document.h"
#include "core/fpdfapi/parser/cpdf_hint_tables.h"
#include "core/fpdfapi/parser/cpdf_linearized_header.h"
#include "core/fpdfapi/parser/cpdf_name.h"
#include "core/fpdfapi/parser/cpdf_number.h"
#include "core/fpdfapi/parser/cpdf_page_object_avail.h"
#include "core/fpdfapi/parser/cpdf_read_validator.h"
#include "core/fpdfapi/parser/cpdf_reference.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
#include "core/fpdfapi/parser/cpdf_syntax_parser.h"
#include "core/fpdfapi/parser/fpdf_parser_utility.h"
#include "core/fxcrt/autorestorer.h"
#include "core/fxcrt/check.h"
#include "core/fxcrt/containers/contains.h"
#include "core/fxcrt/fx_extension.h"
#include "core/fxcrt/fx_safe_types.h"
#include "core/fxcrt/notreached.h"
#include "core/fxcrt/numerics/safe_conversions.h"
#include "core/fxcrt/stl_util.h"
namespace {
RetainPtr<CPDF_Object> GetResourceObject(RetainPtr<CPDF_Dictionary> pDict) { … }
class HintsScope { … };
}
CPDF_DataAvail::FileAvail::~FileAvail() = default;
CPDF_DataAvail::DownloadHints::~DownloadHints() = default;
CPDF_DataAvail::CPDF_DataAvail(FileAvail* pFileAvail,
RetainPtr<IFX_SeekableReadStream> pFileRead)
: … { … }
CPDF_DataAvail::~CPDF_DataAvail() { … }
void CPDF_DataAvail::OnObservableDestroyed() { … }
CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsDocAvail(
DownloadHints* pHints) { … }
bool CPDF_DataAvail::CheckDocStatus() { … }
bool CPDF_DataAvail::CheckPageStatus() { … }
bool CPDF_DataAvail::LoadAllFile() { … }
bool CPDF_DataAvail::CheckAndLoadAllXref() { … }
RetainPtr<CPDF_Object> CPDF_DataAvail::GetObject(uint32_t objnum,
bool* pExistInFile) { … }
bool CPDF_DataAvail::CheckInfo() { … }
bool CPDF_DataAvail::CheckRoot() { … }
bool CPDF_DataAvail::PreparePageItem() { … }
bool CPDF_DataAvail::IsFirstCheck(uint32_t dwPage) { … }
void CPDF_DataAvail::ResetFirstCheck(uint32_t dwPage) { … }
bool CPDF_DataAvail::CheckPage() { … }
bool CPDF_DataAvail::GetPageKids(CPDF_Object* pPages) { … }
bool CPDF_DataAvail::CheckPages() { … }
bool CPDF_DataAvail::CheckHeader() { … }
bool CPDF_DataAvail::CheckFirstPage() { … }
bool CPDF_DataAvail::CheckHintTables() { … }
RetainPtr<CPDF_Object> CPDF_DataAvail::ParseIndirectObjectAt(
FX_FILESIZE pos,
uint32_t objnum,
CPDF_IndirectObjectHolder* pObjList) const { … }
CPDF_DataAvail::DocLinearizationStatus CPDF_DataAvail::IsLinearizedPDF() { … }
CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::CheckHeaderAndLinearized() { … }
bool CPDF_DataAvail::CheckPage(uint32_t dwPage) { … }
bool CPDF_DataAvail::CheckArrayPageNode(uint32_t dwPageNo,
PageNode* pPageNode) { … }
bool CPDF_DataAvail::CheckUnknownPageNode(uint32_t dwPageNo,
PageNode* pPageNode) { … }
bool CPDF_DataAvail::CheckPageNode(const CPDF_DataAvail::PageNode& pageNode,
int32_t iPage,
int32_t& iCount,
int level) { … }
bool CPDF_DataAvail::LoadDocPage(uint32_t dwPage) { … }
bool CPDF_DataAvail::CheckPageCount() { … }
bool CPDF_DataAvail::LoadDocPages() { … }
bool CPDF_DataAvail::LoadPages() { … }
CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::CheckLinearizedData() { … }
CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail(
uint32_t dwPage,
DownloadHints* pHints) { … }
CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::CheckResources(
RetainPtr<CPDF_Dictionary> page) { … }
RetainPtr<CPDF_ReadValidator> CPDF_DataAvail::GetValidator() const { … }
CPDF_SyntaxParser* CPDF_DataAvail::GetSyntaxParser() const { … }
int CPDF_DataAvail::GetPageCount() const { … }
RetainPtr<const CPDF_Dictionary> CPDF_DataAvail::GetPageDictionary(
int index) const { … }
CPDF_DataAvail::DocFormStatus CPDF_DataAvail::IsFormAvail(
DownloadHints* pHints) { … }
CPDF_DataAvail::DocFormStatus CPDF_DataAvail::CheckAcroForm() { … }
bool CPDF_DataAvail::ValidatePage(uint32_t dwPage) const { … }
std::pair<CPDF_Parser::Error, std::unique_ptr<CPDF_Document>>
CPDF_DataAvail::ParseDocument(
std::unique_ptr<CPDF_Document::RenderDataIface> pRenderData,
std::unique_ptr<CPDF_Document::PageDataIface> pPageData,
const ByteString& password) { … }
CPDF_DataAvail::PageNode::PageNode() = default;
CPDF_DataAvail::PageNode::~PageNode() = default;