| Index: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| index db0e8b19e1ebdebba867c9df2104253966613a2b..7db97d25b3724059d264e4eb6c362c5c43028db8 100644
|
| --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| @@ -2678,19 +2678,15 @@ class CPDF_DataAvail final : public IPDF_DataAvail {
|
| FX_BOOL bSupportHintTable);
|
| ~CPDF_DataAvail() override;
|
|
|
| - int IsDocAvail(IFX_DownloadHints* pHints) override;
|
| -
|
| + // IPDF_DataAvail:
|
| + DocAvailStatus IsDocAvail(IFX_DownloadHints* pHints) override;
|
| void SetDocument(CPDF_Document* pDoc) override;
|
| -
|
| int IsPageAvail(int iPage, IFX_DownloadHints* pHints) override;
|
| -
|
| - int IsFormAvail(IFX_DownloadHints* pHints) override;
|
| -
|
| - int IsLinearizedPDF() override;
|
| -
|
| + DocFormStatus IsFormAvail(IFX_DownloadHints* pHints) override;
|
| + DocLinearizationStatus IsLinearizedPDF() override;
|
| FX_BOOL IsLinearized() override { return m_bLinearized; }
|
| -
|
| void GetLinearizedMainXRefInfo(FX_FILESIZE* pPos, FX_DWORD* pSize) override;
|
| +
|
| int GetPageCount() const;
|
| CPDF_Dictionary* GetPage(int index);
|
|
|
| @@ -3080,20 +3076,23 @@ FX_BOOL CPDF_DataAvail::IsObjectsAvail(CFX_PtrArray& obj_array,
|
| obj_array.Append(new_obj_array);
|
| return IsObjectsAvail(obj_array, FALSE, pHints, ret_array);
|
| }
|
| -int CPDF_DataAvail::IsDocAvail(IFX_DownloadHints* pHints) {
|
| +
|
| +IPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsDocAvail(
|
| + IFX_DownloadHints* pHints) {
|
| if (!m_dwFileLen && m_pFileRead) {
|
| m_dwFileLen = (FX_DWORD)m_pFileRead->GetSize();
|
| if (!m_dwFileLen) {
|
| - return PDF_DATA_ERROR;
|
| + return DataError;
|
| }
|
| }
|
| while (!m_bDocAvail) {
|
| if (!CheckDocStatus(pHints)) {
|
| - return PDF_DATA_NOTAVAIL;
|
| + return DataNotAvailable;
|
| }
|
| }
|
| - return PDF_DATA_AVAIL;
|
| + return DataAvailable;
|
| }
|
| +
|
| FX_BOOL CPDF_DataAvail::CheckAcroFormSubObject(IFX_DownloadHints* pHints) {
|
| if (!m_objs_array.GetSize()) {
|
| m_objs_array.RemoveAll();
|
| @@ -3644,24 +3643,24 @@ CPDF_Object* CPDF_DataAvail::ParseIndirectObjectAt(
|
| m_syntaxParser.RestorePos(SavedPos);
|
| return pObj;
|
| }
|
| -int CPDF_DataAvail::IsLinearizedPDF() {
|
| +IPDF_DataAvail::DocLinearizationStatus CPDF_DataAvail::IsLinearizedPDF() {
|
| FX_DWORD req_size = 1024;
|
| if (!m_pFileAvail->IsDataAvail(0, req_size)) {
|
| - return PDF_LINEARIZATION_UNKNOWN;
|
| + return LinearizationUnknown;
|
| }
|
| if (!m_pFileRead) {
|
| - return PDF_NOT_LINEARIZED;
|
| + return NotLinearized;
|
| }
|
| FX_FILESIZE dwSize = m_pFileRead->GetSize();
|
| if (dwSize < (FX_FILESIZE)req_size) {
|
| - return PDF_LINEARIZATION_UNKNOWN;
|
| + return LinearizationUnknown;
|
| }
|
| uint8_t buffer[1024];
|
| m_pFileRead->ReadBlock(buffer, 0, req_size);
|
| if (IsLinearizedFile(buffer, req_size)) {
|
| - return PDF_LINEARIZED;
|
| + return Linearized;
|
| }
|
| - return PDF_NOT_LINEARIZED;
|
| + return NotLinearized;
|
| }
|
| FX_BOOL CPDF_DataAvail::IsLinearizedFile(uint8_t* pData, FX_DWORD dwLen) {
|
| ScopedFileStream file(FX_CreateMemoryStream(pData, (size_t)dwLen, FALSE));
|
| @@ -4278,33 +4277,33 @@ FX_BOOL CPDF_DataAvail::LoadPages(IFX_DownloadHints* pHints) {
|
| }
|
| int CPDF_DataAvail::CheckLinearizedData(IFX_DownloadHints* pHints) {
|
| if (m_bLinearedDataOK) {
|
| - return PDF_DATA_AVAIL;
|
| + return DataAvailable;
|
| }
|
|
|
| if (!m_bMainXRefLoadTried) {
|
| FX_SAFE_DWORD data_size = m_dwFileLen;
|
| data_size -= m_dwLastXRefOffset;
|
| if (!data_size.IsValid()) {
|
| - return PDF_DATA_ERROR;
|
| + return DataError;
|
| }
|
| if (!m_pFileAvail->IsDataAvail(m_dwLastXRefOffset,
|
| data_size.ValueOrDie())) {
|
| pHints->AddSegment(m_dwLastXRefOffset, data_size.ValueOrDie());
|
| - return PDF_DATA_NOTAVAIL;
|
| + return DataNotAvailable;
|
| }
|
| FX_DWORD dwRet = (m_pDocument->GetParser())->LoadLinearizedMainXRefTable();
|
| m_bMainXRefLoadTried = TRUE;
|
| if (dwRet != PDFPARSE_ERROR_SUCCESS) {
|
| - return PDF_DATA_ERROR;
|
| + return DataError;
|
| }
|
| if (!PreparePageItem()) {
|
| - return PDF_DATA_NOTAVAIL;
|
| + return DataNotAvailable;
|
| }
|
| m_bMainXRefLoadedOK = TRUE;
|
| m_bLinearedDataOK = TRUE;
|
| }
|
|
|
| - return m_bLinearedDataOK ? PDF_DATA_AVAIL : PDF_DATA_NOTAVAIL;
|
| + return m_bLinearedDataOK ? DataAvailable : DataNotAvailable;
|
| }
|
| FX_BOOL CPDF_DataAvail::CheckPageAnnots(int32_t iPage,
|
| IFX_DownloadHints* pHints) {
|
| @@ -4372,7 +4371,7 @@ FX_BOOL CPDF_DataAvail::HaveResourceAncestor(CPDF_Dictionary* pDict) {
|
| }
|
| int CPDF_DataAvail::IsPageAvail(int32_t iPage, IFX_DownloadHints* pHints) {
|
| if (!m_pDocument) {
|
| - return PDF_DATA_ERROR;
|
| + return DataError;
|
| }
|
| if (IsFirstCheck(iPage)) {
|
| m_bCurPageDictLoadOK = FALSE;
|
| @@ -4383,52 +4382,52 @@ int CPDF_DataAvail::IsPageAvail(int32_t iPage, IFX_DownloadHints* pHints) {
|
| m_objnum_array.RemoveAll();
|
| }
|
| if (m_pagesLoadState.find(iPage) != m_pagesLoadState.end()) {
|
| - return PDF_DATA_AVAIL;
|
| + return DataAvailable;
|
| }
|
| if (m_bLinearized) {
|
| if ((FX_DWORD)iPage == m_dwFirstPageNo) {
|
| m_pagesLoadState.insert(iPage);
|
| - return PDF_DATA_AVAIL;
|
| + return DataAvailable;
|
| }
|
| int32_t nResult = CheckLinearizedData(pHints);
|
| - if (nResult != PDF_DATA_AVAIL) {
|
| + if (nResult != DataAvailable) {
|
| return nResult;
|
| }
|
| if (m_pHintTables) {
|
| nResult = m_pHintTables->CheckPage(iPage, pHints);
|
| - if (nResult != PDF_DATA_AVAIL)
|
| + if (nResult != DataAvailable)
|
| return nResult;
|
| m_pagesLoadState.insert(iPage);
|
| - return PDF_DATA_AVAIL;
|
| + return DataAvailable;
|
| }
|
| if (m_bMainXRefLoadedOK) {
|
| if (m_bTotalLoadPageTree) {
|
| if (!LoadPages(pHints)) {
|
| - return PDF_DATA_NOTAVAIL;
|
| + return DataNotAvailable;
|
| }
|
| } else {
|
| if (!m_bCurPageDictLoadOK && !CheckPage(iPage, pHints)) {
|
| - return PDF_DATA_NOTAVAIL;
|
| + return DataNotAvailable;
|
| }
|
| }
|
| } else {
|
| if (!LoadAllFile(pHints)) {
|
| - return PDF_DATA_NOTAVAIL;
|
| + return DataNotAvailable;
|
| }
|
| ((CPDF_Parser*)m_pDocument->GetParser())->RebuildCrossRef();
|
| ResetFirstCheck(iPage);
|
| - return PDF_DATA_AVAIL;
|
| + return DataAvailable;
|
| }
|
| } else {
|
| if (!m_bTotalLoadPageTree) {
|
| if (!m_bCurPageDictLoadOK && !CheckPage(iPage, pHints)) {
|
| - return PDF_DATA_NOTAVAIL;
|
| + return DataNotAvailable;
|
| }
|
| }
|
| }
|
| if (m_bHaveAcroForm && !m_bAcroFormLoad) {
|
| if (!CheckAcroFormSubObject(pHints)) {
|
| - return PDF_DATA_NOTAVAIL;
|
| + return DataNotAvailable;
|
| }
|
| m_bAcroFormLoad = TRUE;
|
| }
|
| @@ -4439,7 +4438,7 @@ int CPDF_DataAvail::IsPageAvail(int32_t iPage, IFX_DownloadHints* pHints) {
|
| m_pPageDict = m_pDocument->GetPage(iPage);
|
| if (!m_pPageDict) {
|
| ResetFirstCheck(iPage);
|
| - return PDF_DATA_AVAIL;
|
| + return DataAvailable;
|
| }
|
| CFX_PtrArray obj_array;
|
| obj_array.Add(m_pPageDict);
|
| @@ -4459,14 +4458,14 @@ int CPDF_DataAvail::IsPageAvail(int32_t iPage, IFX_DownloadHints* pHints) {
|
| m_bPageLoadedOK = TRUE;
|
| } else {
|
| m_objs_array.Append(new_objs_array);
|
| - return PDF_DATA_NOTAVAIL;
|
| + return DataNotAvailable;
|
| }
|
| }
|
| }
|
| if (m_bPageLoadedOK) {
|
| if (!m_bAnnotsLoad) {
|
| if (!CheckPageAnnots(iPage, pHints)) {
|
| - return PDF_DATA_NOTAVAIL;
|
| + return DataNotAvailable;
|
| }
|
| m_bAnnotsLoad = TRUE;
|
| }
|
| @@ -4482,7 +4481,7 @@ int CPDF_DataAvail::IsPageAvail(int32_t iPage, IFX_DownloadHints* pHints) {
|
| if (m_bNeedDownLoadResource) {
|
| FX_BOOL bRet = CheckResources(pHints);
|
| if (!bRet) {
|
| - return PDF_DATA_NOTAVAIL;
|
| + return DataNotAvailable;
|
| }
|
| m_bNeedDownLoadResource = FALSE;
|
| }
|
| @@ -4491,7 +4490,7 @@ int CPDF_DataAvail::IsPageAvail(int32_t iPage, IFX_DownloadHints* pHints) {
|
| m_bCurPageDictLoadOK = FALSE;
|
| ResetFirstCheck(iPage);
|
| m_pagesLoadState.insert(iPage);
|
| - return PDF_DATA_AVAIL;
|
| + return DataAvailable;
|
| }
|
| FX_BOOL CPDF_DataAvail::CheckResources(IFX_DownloadHints* pHints) {
|
| if (!m_objs_array.GetSize()) {
|
| @@ -4557,21 +4556,22 @@ CPDF_Dictionary* CPDF_DataAvail::GetPage(int index) {
|
| }
|
| return m_pDocument->GetPage(index);
|
| }
|
| -int CPDF_DataAvail::IsFormAvail(IFX_DownloadHints* pHints) {
|
| +IPDF_DataAvail::DocFormStatus CPDF_DataAvail::IsFormAvail(
|
| + IFX_DownloadHints* pHints) {
|
| if (!m_pDocument) {
|
| - return PDF_FORM_AVAIL;
|
| + return FormAvailable;
|
| }
|
| if (!m_bLinearizedFormParamLoad) {
|
| CPDF_Dictionary* pRoot = m_pDocument->GetRoot();
|
| if (!pRoot) {
|
| - return PDF_FORM_AVAIL;
|
| + return FormAvailable;
|
| }
|
| CPDF_Object* pAcroForm = pRoot->GetElement(FX_BSTRC("AcroForm"));
|
| if (!pAcroForm) {
|
| - return PDF_FORM_NOTEXIST;
|
| + return FormNotExist;
|
| }
|
| if (!CheckLinearizedData(pHints)) {
|
| - return PDF_FORM_NOTAVAIL;
|
| + return FormNotAvailable;
|
| }
|
| if (!m_objs_array.GetSize()) {
|
| m_objs_array.Add(pAcroForm->GetDict());
|
| @@ -4583,9 +4583,9 @@ int CPDF_DataAvail::IsFormAvail(IFX_DownloadHints* pHints) {
|
| m_objs_array.RemoveAll();
|
| if (!bRet) {
|
| m_objs_array.Append(new_objs_array);
|
| - return PDF_FORM_NOTAVAIL;
|
| + return FormNotAvailable;
|
| }
|
| - return PDF_FORM_AVAIL;
|
| + return FormAvailable;
|
| }
|
| void CPDF_SortObjNumArray::AddObjNum(FX_DWORD dwObjNum) {
|
| int32_t iNext = 0;
|
| @@ -4869,17 +4869,17 @@ FX_BOOL CPDF_HintTables::GetPagePos(int index,
|
| }
|
| int32_t CPDF_HintTables::CheckPage(int index, IFX_DownloadHints* pHints) {
|
| if (!m_pLinearizedDict || !pHints)
|
| - return PDF_DATA_ERROR;
|
| + return IPDF_DataAvail::DataError;
|
| CPDF_Object* pFirstAvailPage =
|
| m_pLinearizedDict->GetElementValue(FX_BSTRC("P"));
|
| int nFirstAvailPage = pFirstAvailPage ? pFirstAvailPage->GetInteger() : 0;
|
| if (index == nFirstAvailPage)
|
| - return PDF_DATA_AVAIL;
|
| + return IPDF_DataAvail::DataAvailable;
|
| FX_DWORD dwLength = GetItemLength(index, m_szPageOffsetArray);
|
| if (!dwLength ||
|
| !m_pDataAvail->IsDataAvail(m_szPageOffsetArray[index], dwLength,
|
| pHints)) {
|
| - return PDF_DATA_NOTAVAIL;
|
| + return IPDF_DataAvail::DataNotAvailable;
|
| }
|
| // Download data of shared objects in the page.
|
| FX_DWORD offset = 0;
|
| @@ -4890,7 +4890,7 @@ int32_t CPDF_HintTables::CheckPage(int index, IFX_DownloadHints* pHints) {
|
| m_pLinearizedDict->GetElementValue(FX_BSTRC("O"));
|
| int nFirstPageObjNum = pFirstPageObj ? pFirstPageObj->GetInteger() : -1;
|
| if (nFirstPageObjNum < 0)
|
| - return FALSE;
|
| + return FALSE; // TODO(thestig): Fix this and the return type.
|
| FX_DWORD dwIndex = 0;
|
| FX_DWORD dwObjNum = 0;
|
| for (int j = 0; j < m_dwNSharedObjsArray[index]; ++j) {
|
| @@ -4904,10 +4904,10 @@ int32_t CPDF_HintTables::CheckPage(int index, IFX_DownloadHints* pHints) {
|
| if (!dwLength ||
|
| !m_pDataAvail->IsDataAvail(m_szSharedObjOffsetArray[dwIndex], dwLength,
|
| pHints)) {
|
| - return PDF_DATA_NOTAVAIL;
|
| + return IPDF_DataAvail::DataNotAvailable;
|
| }
|
| }
|
| - return PDF_DATA_AVAIL;
|
| + return IPDF_DataAvail::DataAvailable;
|
| }
|
| FX_BOOL CPDF_HintTables::LoadHintStream(CPDF_Stream* pHintStream) {
|
| if (!pHintStream || !m_pLinearizedDict)
|
|
|