OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "parser_int.h" | 7 #include "parser_int.h" |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 #include <utility> | 10 #include <utility> |
(...skipping 2675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2686 CPDF_Dictionary* GetPage(int index); | 2686 CPDF_Dictionary* GetPage(int index); |
2687 | 2687 |
2688 friend class CPDF_HintTables; | 2688 friend class CPDF_HintTables; |
2689 | 2689 |
2690 protected: | 2690 protected: |
2691 static const int kMaxDataAvailRecursionDepth = 64; | 2691 static const int kMaxDataAvailRecursionDepth = 64; |
2692 static int s_CurrentDataAvailRecursionDepth; | 2692 static int s_CurrentDataAvailRecursionDepth; |
2693 static const int kMaxPageRecursionDepth = 1024; | 2693 static const int kMaxPageRecursionDepth = 1024; |
2694 | 2694 |
2695 FX_DWORD GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset); | 2695 FX_DWORD GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset); |
2696 FX_BOOL IsObjectsAvail(CFX_PtrArray& obj_array, | 2696 FX_BOOL IsObjectsAvail(CFX_ArrayTemplate<CPDF_Object*>& obj_array, |
2697 FX_BOOL bParsePage, | 2697 FX_BOOL bParsePage, |
2698 IFX_DownloadHints* pHints, | 2698 IFX_DownloadHints* pHints, |
2699 CFX_PtrArray& ret_array); | 2699 CFX_ArrayTemplate<CPDF_Object*>& ret_array); |
2700 FX_BOOL CheckDocStatus(IFX_DownloadHints* pHints); | 2700 FX_BOOL CheckDocStatus(IFX_DownloadHints* pHints); |
2701 FX_BOOL CheckHeader(IFX_DownloadHints* pHints); | 2701 FX_BOOL CheckHeader(IFX_DownloadHints* pHints); |
2702 FX_BOOL CheckFirstPage(IFX_DownloadHints* pHints); | 2702 FX_BOOL CheckFirstPage(IFX_DownloadHints* pHints); |
2703 FX_BOOL CheckHintTables(IFX_DownloadHints* pHints); | 2703 FX_BOOL CheckHintTables(IFX_DownloadHints* pHints); |
2704 FX_BOOL CheckEnd(IFX_DownloadHints* pHints); | 2704 FX_BOOL CheckEnd(IFX_DownloadHints* pHints); |
2705 FX_BOOL CheckCrossRef(IFX_DownloadHints* pHints); | 2705 FX_BOOL CheckCrossRef(IFX_DownloadHints* pHints); |
2706 FX_BOOL CheckCrossRefItem(IFX_DownloadHints* pHints); | 2706 FX_BOOL CheckCrossRefItem(IFX_DownloadHints* pHints); |
2707 FX_BOOL CheckTrailer(IFX_DownloadHints* pHints); | 2707 FX_BOOL CheckTrailer(IFX_DownloadHints* pHints); |
2708 FX_BOOL CheckRoot(IFX_DownloadHints* pHints); | 2708 FX_BOOL CheckRoot(IFX_DownloadHints* pHints); |
2709 FX_BOOL CheckInfo(IFX_DownloadHints* pHints); | 2709 FX_BOOL CheckInfo(IFX_DownloadHints* pHints); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2788 FX_FILESIZE m_dwCurrentOffset; | 2788 FX_FILESIZE m_dwCurrentOffset; |
2789 | 2789 |
2790 PDF_DATAAVAIL_STATUS m_docStatus; | 2790 PDF_DATAAVAIL_STATUS m_docStatus; |
2791 | 2791 |
2792 FX_FILESIZE m_dwFileLen; | 2792 FX_FILESIZE m_dwFileLen; |
2793 | 2793 |
2794 CPDF_Document* m_pDocument; | 2794 CPDF_Document* m_pDocument; |
2795 | 2795 |
2796 CPDF_SortObjNumArray m_objnum_array; | 2796 CPDF_SortObjNumArray m_objnum_array; |
2797 | 2797 |
2798 CFX_PtrArray m_objs_array; | 2798 CFX_ArrayTemplate<CPDF_Object*> m_objs_array; |
2799 | 2799 |
2800 FX_FILESIZE m_Pos; | 2800 FX_FILESIZE m_Pos; |
2801 | 2801 |
2802 FX_FILESIZE m_bufferOffset; | 2802 FX_FILESIZE m_bufferOffset; |
2803 | 2803 |
2804 FX_DWORD m_bufferSize; | 2804 FX_DWORD m_bufferSize; |
2805 | 2805 |
2806 CFX_ByteString m_WordBuf; | 2806 CFX_ByteString m_WordBuf; |
2807 | 2807 |
2808 uint8_t m_WordBuffer[257]; | 2808 uint8_t m_WordBuffer[257]; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2840 FX_BOOL m_bAnnotsLoad; | 2840 FX_BOOL m_bAnnotsLoad; |
2841 | 2841 |
2842 FX_BOOL m_bHaveAcroForm; | 2842 FX_BOOL m_bHaveAcroForm; |
2843 | 2843 |
2844 FX_DWORD m_dwAcroFormObjNum; | 2844 FX_DWORD m_dwAcroFormObjNum; |
2845 | 2845 |
2846 FX_BOOL m_bAcroFormLoad; | 2846 FX_BOOL m_bAcroFormLoad; |
2847 | 2847 |
2848 CPDF_Object* m_pAcroForm; | 2848 CPDF_Object* m_pAcroForm; |
2849 | 2849 |
2850 CFX_PtrArray m_arrayAcroforms; | 2850 CFX_ArrayTemplate<CPDF_Object*> m_arrayAcroforms; |
2851 | 2851 |
2852 CPDF_Dictionary* m_pPageDict; | 2852 CPDF_Dictionary* m_pPageDict; |
2853 | 2853 |
2854 CPDF_Object* m_pPageResource; | 2854 CPDF_Object* m_pPageResource; |
2855 | 2855 |
2856 FX_BOOL m_bNeedDownLoadResource; | 2856 FX_BOOL m_bNeedDownLoadResource; |
2857 | 2857 |
2858 FX_BOOL m_bPageLoadedOK; | 2858 FX_BOOL m_bPageLoadedOK; |
2859 | 2859 |
2860 FX_BOOL m_bLinearizedFormParamLoad; | 2860 FX_BOOL m_bLinearizedFormParamLoad; |
2861 | 2861 |
2862 CFX_PtrArray m_PagesArray; | 2862 CFX_ArrayTemplate<CPDF_Object*> m_PagesArray; |
2863 | 2863 |
2864 FX_DWORD m_dwEncryptObjNum; | 2864 FX_DWORD m_dwEncryptObjNum; |
2865 | 2865 |
2866 FX_FILESIZE m_dwPrevXRefOffset; | 2866 FX_FILESIZE m_dwPrevXRefOffset; |
2867 | 2867 |
2868 FX_BOOL m_bTotalLoadPageTree; | 2868 FX_BOOL m_bTotalLoadPageTree; |
2869 | 2869 |
2870 FX_BOOL m_bCurPageDictLoadOK; | 2870 FX_BOOL m_bCurPageDictLoadOK; |
2871 | 2871 |
2872 CPDF_PageNode m_pageNodes; | 2872 CPDF_PageNode m_pageNodes; |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2947 } | 2947 } |
2948 if (m_pRoot) { | 2948 if (m_pRoot) { |
2949 m_pRoot->Release(); | 2949 m_pRoot->Release(); |
2950 } | 2950 } |
2951 if (m_pTrailer) { | 2951 if (m_pTrailer) { |
2952 m_pTrailer->Release(); | 2952 m_pTrailer->Release(); |
2953 } | 2953 } |
2954 | 2954 |
2955 int iSize = m_arrayAcroforms.GetSize(); | 2955 int iSize = m_arrayAcroforms.GetSize(); |
2956 for (int i = 0; i < iSize; ++i) { | 2956 for (int i = 0; i < iSize; ++i) { |
2957 static_cast<CPDF_Object*>(m_arrayAcroforms.GetAt(i))->Release(); | 2957 m_arrayAcroforms.GetAt(i)->Release(); |
2958 } | 2958 } |
2959 } | 2959 } |
2960 void CPDF_DataAvail::SetDocument(CPDF_Document* pDoc) { | 2960 void CPDF_DataAvail::SetDocument(CPDF_Document* pDoc) { |
2961 m_pDocument = pDoc; | 2961 m_pDocument = pDoc; |
2962 } | 2962 } |
2963 FX_DWORD CPDF_DataAvail::GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset) { | 2963 FX_DWORD CPDF_DataAvail::GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset) { |
2964 CPDF_Parser* pParser = (CPDF_Parser*)(m_pDocument->GetParser()); | 2964 CPDF_Parser* pParser = (CPDF_Parser*)(m_pDocument->GetParser()); |
2965 if (pParser == NULL) { | 2965 if (pParser == NULL) { |
2966 return 0; | 2966 return 0; |
2967 } | 2967 } |
(...skipping 16 matching lines...) Expand all Loading... |
2984 } | 2984 } |
2985 if ((FX_FILESIZE*)pResult - | 2985 if ((FX_FILESIZE*)pResult - |
2986 (FX_FILESIZE*)pParser->m_SortedOffset.GetData() == | 2986 (FX_FILESIZE*)pParser->m_SortedOffset.GetData() == |
2987 pParser->m_SortedOffset.GetSize() - 1) { | 2987 pParser->m_SortedOffset.GetSize() - 1) { |
2988 return 0; | 2988 return 0; |
2989 } | 2989 } |
2990 return (FX_DWORD)(((FX_FILESIZE*)pResult)[1] - offset); | 2990 return (FX_DWORD)(((FX_FILESIZE*)pResult)[1] - offset); |
2991 } | 2991 } |
2992 return 0; | 2992 return 0; |
2993 } | 2993 } |
2994 FX_BOOL CPDF_DataAvail::IsObjectsAvail(CFX_PtrArray& obj_array, | 2994 FX_BOOL CPDF_DataAvail::IsObjectsAvail( |
2995 FX_BOOL bParsePage, | 2995 CFX_ArrayTemplate<CPDF_Object*>& obj_array, |
2996 IFX_DownloadHints* pHints, | 2996 FX_BOOL bParsePage, |
2997 CFX_PtrArray& ret_array) { | 2997 IFX_DownloadHints* pHints, |
| 2998 CFX_ArrayTemplate<CPDF_Object*>& ret_array) { |
2998 if (!obj_array.GetSize()) { | 2999 if (!obj_array.GetSize()) { |
2999 return TRUE; | 3000 return TRUE; |
3000 } | 3001 } |
3001 FX_DWORD count = 0; | 3002 FX_DWORD count = 0; |
3002 CFX_PtrArray new_obj_array; | 3003 CFX_ArrayTemplate<CPDF_Object*> new_obj_array; |
3003 int32_t i = 0; | 3004 int32_t i = 0; |
3004 for (i = 0; i < obj_array.GetSize(); i++) { | 3005 for (i = 0; i < obj_array.GetSize(); i++) { |
3005 CPDF_Object* pObj = static_cast<CPDF_Object*>(obj_array[i]); | 3006 CPDF_Object* pObj = obj_array[i]; |
3006 if (!pObj) | 3007 if (!pObj) |
3007 continue; | 3008 continue; |
3008 | 3009 |
3009 int32_t type = pObj->GetType(); | 3010 int32_t type = pObj->GetType(); |
3010 switch (type) { | 3011 switch (type) { |
3011 case PDFOBJ_ARRAY: { | 3012 case PDFOBJ_ARRAY: { |
3012 CPDF_Array* pArray = pObj->GetArray(); | 3013 CPDF_Array* pArray = pObj->GetArray(); |
3013 for (FX_DWORD k = 0; k < pArray->GetCount(); k++) { | 3014 for (FX_DWORD k = 0; k < pArray->GetCount(); k++) { |
3014 new_obj_array.Add(pArray->GetElement(k)); | 3015 new_obj_array.Add(pArray->GetElement(k)); |
3015 } | 3016 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3049 if (pReferred) { | 3050 if (pReferred) { |
3050 new_obj_array.Add(pReferred); | 3051 new_obj_array.Add(pReferred); |
3051 } | 3052 } |
3052 } | 3053 } |
3053 } break; | 3054 } break; |
3054 } | 3055 } |
3055 } | 3056 } |
3056 if (count > 0) { | 3057 if (count > 0) { |
3057 int32_t iSize = new_obj_array.GetSize(); | 3058 int32_t iSize = new_obj_array.GetSize(); |
3058 for (i = 0; i < iSize; ++i) { | 3059 for (i = 0; i < iSize; ++i) { |
3059 CPDF_Object* pObj = static_cast<CPDF_Object*>(new_obj_array[i]); | 3060 CPDF_Object* pObj = new_obj_array[i]; |
3060 if (CPDF_Reference* pRef = pObj->AsReference()) { | 3061 if (CPDF_Reference* pRef = pObj->AsReference()) { |
3061 FX_DWORD dwNum = pRef->GetRefObjNum(); | 3062 FX_DWORD dwNum = pRef->GetRefObjNum(); |
3062 if (!m_objnum_array.Find(dwNum)) | 3063 if (!m_objnum_array.Find(dwNum)) |
3063 ret_array.Add(pObj); | 3064 ret_array.Add(pObj); |
3064 } else { | 3065 } else { |
3065 ret_array.Add(pObj); | 3066 ret_array.Add(pObj); |
3066 } | 3067 } |
3067 } | 3068 } |
3068 return FALSE; | 3069 return FALSE; |
3069 } | 3070 } |
(...skipping 15 matching lines...) Expand all Loading... |
3085 return DataNotAvailable; | 3086 return DataNotAvailable; |
3086 } | 3087 } |
3087 } | 3088 } |
3088 return DataAvailable; | 3089 return DataAvailable; |
3089 } | 3090 } |
3090 | 3091 |
3091 FX_BOOL CPDF_DataAvail::CheckAcroFormSubObject(IFX_DownloadHints* pHints) { | 3092 FX_BOOL CPDF_DataAvail::CheckAcroFormSubObject(IFX_DownloadHints* pHints) { |
3092 if (!m_objs_array.GetSize()) { | 3093 if (!m_objs_array.GetSize()) { |
3093 m_objs_array.RemoveAll(); | 3094 m_objs_array.RemoveAll(); |
3094 m_objnum_array.RemoveAll(); | 3095 m_objnum_array.RemoveAll(); |
3095 CFX_PtrArray obj_array; | 3096 CFX_ArrayTemplate<CPDF_Object*> obj_array; |
3096 obj_array.Append(m_arrayAcroforms); | 3097 obj_array.Append(m_arrayAcroforms); |
3097 FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array); | 3098 FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array); |
3098 if (bRet) { | 3099 if (bRet) { |
3099 m_objs_array.RemoveAll(); | 3100 m_objs_array.RemoveAll(); |
3100 } | 3101 } |
3101 return bRet; | 3102 return bRet; |
3102 } | 3103 } |
3103 CFX_PtrArray new_objs_array; | 3104 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; |
3104 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); | 3105 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); |
3105 if (bRet) { | 3106 if (bRet) { |
3106 int32_t iSize = m_arrayAcroforms.GetSize(); | 3107 int32_t iSize = m_arrayAcroforms.GetSize(); |
3107 for (int32_t i = 0; i < iSize; ++i) { | 3108 for (int32_t i = 0; i < iSize; ++i) { |
3108 static_cast<CPDF_Object*>(m_arrayAcroforms.GetAt(i))->Release(); | 3109 m_arrayAcroforms.GetAt(i)->Release(); |
3109 } | 3110 } |
3110 m_arrayAcroforms.RemoveAll(); | 3111 m_arrayAcroforms.RemoveAll(); |
3111 } else { | 3112 } else { |
3112 m_objs_array.RemoveAll(); | 3113 m_objs_array.RemoveAll(); |
3113 m_objs_array.Append(new_objs_array); | 3114 m_objs_array.Append(new_objs_array); |
3114 } | 3115 } |
3115 return bRet; | 3116 return bRet; |
3116 } | 3117 } |
3117 FX_BOOL CPDF_DataAvail::CheckAcroForm(IFX_DownloadHints* pHints) { | 3118 FX_BOOL CPDF_DataAvail::CheckAcroForm(IFX_DownloadHints* pHints) { |
3118 FX_BOOL bExist = FALSE; | 3119 FX_BOOL bExist = FALSE; |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3384 } | 3385 } |
3385 pObj->Release(); | 3386 pObj->Release(); |
3386 } | 3387 } |
3387 m_PageObjList.RemoveAll(); | 3388 m_PageObjList.RemoveAll(); |
3388 if (UnavailObjList.GetSize()) { | 3389 if (UnavailObjList.GetSize()) { |
3389 m_PageObjList.Append(UnavailObjList); | 3390 m_PageObjList.Append(UnavailObjList); |
3390 return FALSE; | 3391 return FALSE; |
3391 } | 3392 } |
3392 FX_DWORD iPages = m_PagesArray.GetSize(); | 3393 FX_DWORD iPages = m_PagesArray.GetSize(); |
3393 for (FX_DWORD i = 0; i < iPages; i++) { | 3394 for (FX_DWORD i = 0; i < iPages; i++) { |
3394 CPDF_Object* pPages = static_cast<CPDF_Object*>(m_PagesArray.GetAt(i)); | 3395 CPDF_Object* pPages = m_PagesArray.GetAt(i); |
3395 if (!pPages) | 3396 if (!pPages) |
3396 continue; | 3397 continue; |
3397 | 3398 |
3398 if (!GetPageKids(m_pCurrentParser, pPages)) { | 3399 if (!GetPageKids(m_pCurrentParser, pPages)) { |
3399 pPages->Release(); | 3400 pPages->Release(); |
3400 while (++i < iPages) { | 3401 while (++i < iPages) { |
3401 pPages = static_cast<CPDF_Object*>(m_PagesArray.GetAt(i)); | 3402 pPages = m_PagesArray.GetAt(i); |
3402 pPages->Release(); | 3403 pPages->Release(); |
3403 } | 3404 } |
3404 m_PagesArray.RemoveAll(); | 3405 m_PagesArray.RemoveAll(); |
3405 m_docStatus = PDF_DATAAVAIL_ERROR; | 3406 m_docStatus = PDF_DATAAVAIL_ERROR; |
3406 return FALSE; | 3407 return FALSE; |
3407 } | 3408 } |
3408 pPages->Release(); | 3409 pPages->Release(); |
3409 } | 3410 } |
3410 m_PagesArray.RemoveAll(); | 3411 m_PagesArray.RemoveAll(); |
3411 if (!m_PageObjList.GetSize()) { | 3412 if (!m_PageObjList.GetSize()) { |
(...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4156 int level) { | 4157 int level) { |
4157 if (level >= kMaxPageRecursionDepth) { | 4158 if (level >= kMaxPageRecursionDepth) { |
4158 return FALSE; | 4159 return FALSE; |
4159 } | 4160 } |
4160 int32_t iSize = pageNodes.m_childNode.GetSize(); | 4161 int32_t iSize = pageNodes.m_childNode.GetSize(); |
4161 if (iSize <= 0 || iPage >= iSize) { | 4162 if (iSize <= 0 || iPage >= iSize) { |
4162 m_docStatus = PDF_DATAAVAIL_ERROR; | 4163 m_docStatus = PDF_DATAAVAIL_ERROR; |
4163 return FALSE; | 4164 return FALSE; |
4164 } | 4165 } |
4165 for (int32_t i = 0; i < iSize; ++i) { | 4166 for (int32_t i = 0; i < iSize; ++i) { |
4166 CPDF_PageNode* pNode = (CPDF_PageNode*)pageNodes.m_childNode.GetAt(i); | 4167 CPDF_PageNode* pNode = pageNodes.m_childNode.GetAt(i); |
4167 if (!pNode) { | 4168 if (!pNode) { |
4168 continue; | 4169 continue; |
4169 } | 4170 } |
4170 switch (pNode->m_type) { | 4171 switch (pNode->m_type) { |
4171 case PDF_PAGENODE_UNKOWN: | 4172 case PDF_PAGENODE_UNKOWN: |
4172 if (!CheckUnkownPageNode(pNode->m_dwPageNo, pNode, pHints)) { | 4173 if (!CheckUnkownPageNode(pNode->m_dwPageNo, pNode, pHints)) { |
4173 return FALSE; | 4174 return FALSE; |
4174 } | 4175 } |
4175 --i; | 4176 --i; |
4176 break; | 4177 break; |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4303 m_objs_array.RemoveAll(); | 4304 m_objs_array.RemoveAll(); |
4304 m_objnum_array.RemoveAll(); | 4305 m_objnum_array.RemoveAll(); |
4305 CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iPage); | 4306 CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iPage); |
4306 if (!pPageDict) { | 4307 if (!pPageDict) { |
4307 return TRUE; | 4308 return TRUE; |
4308 } | 4309 } |
4309 CPDF_Object* pAnnots = pPageDict->GetElement(FX_BSTRC("Annots")); | 4310 CPDF_Object* pAnnots = pPageDict->GetElement(FX_BSTRC("Annots")); |
4310 if (!pAnnots) { | 4311 if (!pAnnots) { |
4311 return TRUE; | 4312 return TRUE; |
4312 } | 4313 } |
4313 CFX_PtrArray obj_array; | 4314 CFX_ArrayTemplate<CPDF_Object*> obj_array; |
4314 obj_array.Add(pAnnots); | 4315 obj_array.Add(pAnnots); |
4315 FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array); | 4316 FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array); |
4316 if (bRet) { | 4317 if (bRet) { |
4317 m_objs_array.RemoveAll(); | 4318 m_objs_array.RemoveAll(); |
4318 } | 4319 } |
4319 return bRet; | 4320 return bRet; |
4320 } | 4321 } |
4321 CFX_PtrArray new_objs_array; | 4322 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; |
4322 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); | 4323 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); |
4323 m_objs_array.RemoveAll(); | 4324 m_objs_array.RemoveAll(); |
4324 if (!bRet) { | 4325 if (!bRet) { |
4325 m_objs_array.Append(new_objs_array); | 4326 m_objs_array.Append(new_objs_array); |
4326 } | 4327 } |
4327 return bRet; | 4328 return bRet; |
4328 } | 4329 } |
4329 FX_BOOL CPDF_DataAvail::CheckLinearizedFirstPage(int32_t iPage, | 4330 FX_BOOL CPDF_DataAvail::CheckLinearizedFirstPage(int32_t iPage, |
4330 IFX_DownloadHints* pHints) { | 4331 IFX_DownloadHints* pHints) { |
4331 if (!m_bAnnotsLoad) { | 4332 if (!m_bAnnotsLoad) { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4425 } | 4426 } |
4426 if (!m_bPageLoadedOK) { | 4427 if (!m_bPageLoadedOK) { |
4427 if (!m_objs_array.GetSize()) { | 4428 if (!m_objs_array.GetSize()) { |
4428 m_objs_array.RemoveAll(); | 4429 m_objs_array.RemoveAll(); |
4429 m_objnum_array.RemoveAll(); | 4430 m_objnum_array.RemoveAll(); |
4430 m_pPageDict = m_pDocument->GetPage(iPage); | 4431 m_pPageDict = m_pDocument->GetPage(iPage); |
4431 if (!m_pPageDict) { | 4432 if (!m_pPageDict) { |
4432 ResetFirstCheck(iPage); | 4433 ResetFirstCheck(iPage); |
4433 return DataAvailable; | 4434 return DataAvailable; |
4434 } | 4435 } |
4435 CFX_PtrArray obj_array; | 4436 CFX_ArrayTemplate<CPDF_Object*> obj_array; |
4436 obj_array.Add(m_pPageDict); | 4437 obj_array.Add(m_pPageDict); |
4437 FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array); | 4438 FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array); |
4438 if (bRet) { | 4439 if (bRet) { |
4439 m_objs_array.RemoveAll(); | 4440 m_objs_array.RemoveAll(); |
4440 m_bPageLoadedOK = TRUE; | 4441 m_bPageLoadedOK = TRUE; |
4441 } else { | 4442 } else { |
4442 return bRet; | 4443 return bRet; |
4443 } | 4444 } |
4444 } else { | 4445 } else { |
4445 CFX_PtrArray new_objs_array; | 4446 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; |
4446 FX_BOOL bRet = | 4447 FX_BOOL bRet = |
4447 IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); | 4448 IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); |
4448 m_objs_array.RemoveAll(); | 4449 m_objs_array.RemoveAll(); |
4449 if (bRet) { | 4450 if (bRet) { |
4450 m_bPageLoadedOK = TRUE; | 4451 m_bPageLoadedOK = TRUE; |
4451 } else { | 4452 } else { |
4452 m_objs_array.Append(new_objs_array); | 4453 m_objs_array.Append(new_objs_array); |
4453 return DataNotAvailable; | 4454 return DataNotAvailable; |
4454 } | 4455 } |
4455 } | 4456 } |
(...skipping 24 matching lines...) Expand all Loading... |
4480 m_bPageLoadedOK = FALSE; | 4481 m_bPageLoadedOK = FALSE; |
4481 m_bAnnotsLoad = FALSE; | 4482 m_bAnnotsLoad = FALSE; |
4482 m_bCurPageDictLoadOK = FALSE; | 4483 m_bCurPageDictLoadOK = FALSE; |
4483 ResetFirstCheck(iPage); | 4484 ResetFirstCheck(iPage); |
4484 m_pagesLoadState.insert(iPage); | 4485 m_pagesLoadState.insert(iPage); |
4485 return DataAvailable; | 4486 return DataAvailable; |
4486 } | 4487 } |
4487 FX_BOOL CPDF_DataAvail::CheckResources(IFX_DownloadHints* pHints) { | 4488 FX_BOOL CPDF_DataAvail::CheckResources(IFX_DownloadHints* pHints) { |
4488 if (!m_objs_array.GetSize()) { | 4489 if (!m_objs_array.GetSize()) { |
4489 m_objs_array.RemoveAll(); | 4490 m_objs_array.RemoveAll(); |
4490 CFX_PtrArray obj_array; | 4491 CFX_ArrayTemplate<CPDF_Object*> obj_array; |
4491 obj_array.Add(m_pPageResource); | 4492 obj_array.Add(m_pPageResource); |
4492 FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array); | 4493 FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array); |
4493 if (bRet) { | 4494 if (bRet) { |
4494 m_objs_array.RemoveAll(); | 4495 m_objs_array.RemoveAll(); |
4495 } | 4496 } |
4496 return bRet; | 4497 return bRet; |
4497 } | 4498 } |
4498 CFX_PtrArray new_objs_array; | 4499 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; |
4499 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); | 4500 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); |
4500 m_objs_array.RemoveAll(); | 4501 m_objs_array.RemoveAll(); |
4501 if (!bRet) { | 4502 if (!bRet) { |
4502 m_objs_array.Append(new_objs_array); | 4503 m_objs_array.Append(new_objs_array); |
4503 } | 4504 } |
4504 return bRet; | 4505 return bRet; |
4505 } | 4506 } |
4506 void CPDF_DataAvail::GetLinearizedMainXRefInfo(FX_FILESIZE* pPos, | 4507 void CPDF_DataAvail::GetLinearizedMainXRefInfo(FX_FILESIZE* pPos, |
4507 FX_DWORD* pSize) { | 4508 FX_DWORD* pSize) { |
4508 if (pPos) { | 4509 if (pPos) { |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4563 return FormNotExist; | 4564 return FormNotExist; |
4564 } | 4565 } |
4565 if (!CheckLinearizedData(pHints)) { | 4566 if (!CheckLinearizedData(pHints)) { |
4566 return FormNotAvailable; | 4567 return FormNotAvailable; |
4567 } | 4568 } |
4568 if (!m_objs_array.GetSize()) { | 4569 if (!m_objs_array.GetSize()) { |
4569 m_objs_array.Add(pAcroForm->GetDict()); | 4570 m_objs_array.Add(pAcroForm->GetDict()); |
4570 } | 4571 } |
4571 m_bLinearizedFormParamLoad = TRUE; | 4572 m_bLinearizedFormParamLoad = TRUE; |
4572 } | 4573 } |
4573 CFX_PtrArray new_objs_array; | 4574 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; |
4574 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); | 4575 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); |
4575 m_objs_array.RemoveAll(); | 4576 m_objs_array.RemoveAll(); |
4576 if (!bRet) { | 4577 if (!bRet) { |
4577 m_objs_array.Append(new_objs_array); | 4578 m_objs_array.Append(new_objs_array); |
4578 return FormNotAvailable; | 4579 return FormNotAvailable; |
4579 } | 4580 } |
4580 return FormAvailable; | 4581 return FormAvailable; |
4581 } | 4582 } |
4582 void CPDF_SortObjNumArray::AddObjNum(FX_DWORD dwObjNum) { | 4583 void CPDF_SortObjNumArray::AddObjNum(FX_DWORD dwObjNum) { |
4583 int32_t iNext = 0; | 4584 int32_t iNext = 0; |
(...skipping 18 matching lines...) Expand all Loading... |
4602 if (m_number_array.GetAt(iMid) > value) { | 4603 if (m_number_array.GetAt(iMid) > value) { |
4603 iHigh = iMid - 1; | 4604 iHigh = iMid - 1; |
4604 } else if (m_number_array.GetAt(iMid) < value) { | 4605 } else if (m_number_array.GetAt(iMid) < value) { |
4605 iLow = iMid + 1; | 4606 iLow = iMid + 1; |
4606 } | 4607 } |
4607 } | 4608 } |
4608 iNext = iLow; | 4609 iNext = iLow; |
4609 return FALSE; | 4610 return FALSE; |
4610 } | 4611 } |
4611 CPDF_PageNode::~CPDF_PageNode() { | 4612 CPDF_PageNode::~CPDF_PageNode() { |
4612 int32_t iSize = m_childNode.GetSize(); | 4613 for (int32_t i = 0; i < m_childNode.GetSize(); ++i) { |
4613 for (int32_t i = 0; i < iSize; ++i) { | 4614 delete m_childNode[i]; |
4614 CPDF_PageNode* pNode = (CPDF_PageNode*)m_childNode[i]; | |
4615 delete pNode; | |
4616 } | 4615 } |
4617 m_childNode.RemoveAll(); | 4616 m_childNode.RemoveAll(); |
4618 } | 4617 } |
4619 CPDF_HintTables::~CPDF_HintTables() { | 4618 CPDF_HintTables::~CPDF_HintTables() { |
4620 m_dwDeltaNObjsArray.RemoveAll(); | 4619 m_dwDeltaNObjsArray.RemoveAll(); |
4621 m_dwNSharedObjsArray.RemoveAll(); | 4620 m_dwNSharedObjsArray.RemoveAll(); |
4622 m_dwSharedObjNumArray.RemoveAll(); | 4621 m_dwSharedObjNumArray.RemoveAll(); |
4623 m_dwIdentifierArray.RemoveAll(); | 4622 m_dwIdentifierArray.RemoveAll(); |
4624 m_szPageOffsetArray.RemoveAll(); | 4623 m_szPageOffsetArray.RemoveAll(); |
4625 m_szSharedObjOffsetArray.RemoveAll(); | 4624 m_szSharedObjOffsetArray.RemoveAll(); |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4938 if (!m_pLinearizedDict) | 4937 if (!m_pLinearizedDict) |
4939 return -1; | 4938 return -1; |
4940 CPDF_Array* pRange = m_pLinearizedDict->GetArray(FX_BSTRC("H")); | 4939 CPDF_Array* pRange = m_pLinearizedDict->GetArray(FX_BSTRC("H")); |
4941 if (!pRange) | 4940 if (!pRange) |
4942 return -1; | 4941 return -1; |
4943 CPDF_Object* pStreamLen = pRange->GetElementValue(1); | 4942 CPDF_Object* pStreamLen = pRange->GetElementValue(1); |
4944 if (!pStreamLen) | 4943 if (!pStreamLen) |
4945 return -1; | 4944 return -1; |
4946 return pStreamLen->GetInteger(); | 4945 return pStreamLen->GetInteger(); |
4947 } | 4946 } |
OLD | NEW |