| 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 "public/fpdfview.h" | 7 #include "public/fpdfview.h" |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 | 389 |
| 390 CPDF_Document* pdfDoc = | 390 CPDF_Document* pdfDoc = |
| 391 (static_cast<CPDFXFA_Document*>(document))->GetPDFDoc(); | 391 (static_cast<CPDFXFA_Document*>(document))->GetPDFDoc(); |
| 392 if (!pdfDoc) | 392 if (!pdfDoc) |
| 393 return FALSE; | 393 return FALSE; |
| 394 | 394 |
| 395 CPDF_Dictionary* pRoot = pdfDoc->GetRoot(); | 395 CPDF_Dictionary* pRoot = pdfDoc->GetRoot(); |
| 396 if (!pRoot) | 396 if (!pRoot) |
| 397 return FALSE; | 397 return FALSE; |
| 398 | 398 |
| 399 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); | 399 CPDF_Dictionary* pAcroForm = pRoot->GetDictFor("AcroForm"); |
| 400 if (!pAcroForm) | 400 if (!pAcroForm) |
| 401 return FALSE; | 401 return FALSE; |
| 402 | 402 |
| 403 CPDF_Object* pXFA = pAcroForm->GetObjectBy("XFA"); | 403 CPDF_Object* pXFA = pAcroForm->GetObjectFor("XFA"); |
| 404 if (!pXFA) | 404 if (!pXFA) |
| 405 return FALSE; | 405 return FALSE; |
| 406 | 406 |
| 407 bool bDynamicXFA = pRoot->GetBooleanBy("NeedsRendering", false); | 407 bool bDynamicXFA = pRoot->GetBooleanFor("NeedsRendering", false); |
| 408 *docType = bDynamicXFA ? DOCTYPE_DYNAMIC_XFA : DOCTYPE_STATIC_XFA; | 408 *docType = bDynamicXFA ? DOCTYPE_DYNAMIC_XFA : DOCTYPE_STATIC_XFA; |
| 409 return TRUE; | 409 return TRUE; |
| 410 } | 410 } |
| 411 | 411 |
| 412 DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) { | 412 DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) { |
| 413 return document && (static_cast<CPDFXFA_Document*>(document))->LoadXFADoc(); | 413 return document && (static_cast<CPDFXFA_Document*>(document))->LoadXFADoc(); |
| 414 } | 414 } |
| 415 #endif // PDF_ENABLE_XFA | 415 #endif // PDF_ENABLE_XFA |
| 416 | 416 |
| 417 class CMemFile final : public IFX_FileRead { | 417 class CMemFile final : public IFX_FileRead { |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 | 512 |
| 513 return pDoc->GetUserPermissions(); | 513 return pDoc->GetUserPermissions(); |
| 514 } | 514 } |
| 515 | 515 |
| 516 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { | 516 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { |
| 517 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); | 517 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 518 if (!pDoc || !pDoc->GetParser()) | 518 if (!pDoc || !pDoc->GetParser()) |
| 519 return -1; | 519 return -1; |
| 520 | 520 |
| 521 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); | 521 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); |
| 522 return pDict ? pDict->GetIntegerBy("R") : -1; | 522 return pDict ? pDict->GetIntegerFor("R") : -1; |
| 523 } | 523 } |
| 524 | 524 |
| 525 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { | 525 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { |
| 526 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); | 526 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); |
| 527 return pDoc ? pDoc->GetPageCount() : 0; | 527 return pDoc ? pDoc->GetPageCount() : 0; |
| 528 } | 528 } |
| 529 | 529 |
| 530 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, | 530 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, |
| 531 int page_index) { | 531 int page_index) { |
| 532 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); | 532 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); |
| (...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 984 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); | 984 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 985 if (!pDoc) | 985 if (!pDoc) |
| 986 return 0; | 986 return 0; |
| 987 | 987 |
| 988 CPDF_Dictionary* pRoot = pDoc->GetRoot(); | 988 CPDF_Dictionary* pRoot = pDoc->GetRoot(); |
| 989 if (!pRoot) | 989 if (!pRoot) |
| 990 return 0; | 990 return 0; |
| 991 | 991 |
| 992 CPDF_NameTree nameTree(pDoc, "Dests"); | 992 CPDF_NameTree nameTree(pDoc, "Dests"); |
| 993 pdfium::base::CheckedNumeric<FPDF_DWORD> count = nameTree.GetCount(); | 993 pdfium::base::CheckedNumeric<FPDF_DWORD> count = nameTree.GetCount(); |
| 994 CPDF_Dictionary* pDest = pRoot->GetDictBy("Dests"); | 994 CPDF_Dictionary* pDest = pRoot->GetDictFor("Dests"); |
| 995 if (pDest) | 995 if (pDest) |
| 996 count += pDest->GetCount(); | 996 count += pDest->GetCount(); |
| 997 | 997 |
| 998 if (!count.IsValid()) | 998 if (!count.IsValid()) |
| 999 return 0; | 999 return 0; |
| 1000 | 1000 |
| 1001 return count.ValueOrDie(); | 1001 return count.ValueOrDie(); |
| 1002 } | 1002 } |
| 1003 | 1003 |
| 1004 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, | 1004 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1083 | 1083 |
| 1084 CPDF_Dictionary* pRoot = pDoc->GetRoot(); | 1084 CPDF_Dictionary* pRoot = pDoc->GetRoot(); |
| 1085 if (!pRoot) | 1085 if (!pRoot) |
| 1086 return nullptr; | 1086 return nullptr; |
| 1087 | 1087 |
| 1088 CPDF_Object* pDestObj = nullptr; | 1088 CPDF_Object* pDestObj = nullptr; |
| 1089 CFX_ByteString bsName; | 1089 CFX_ByteString bsName; |
| 1090 CPDF_NameTree nameTree(pDoc, "Dests"); | 1090 CPDF_NameTree nameTree(pDoc, "Dests"); |
| 1091 int count = nameTree.GetCount(); | 1091 int count = nameTree.GetCount(); |
| 1092 if (index >= count) { | 1092 if (index >= count) { |
| 1093 CPDF_Dictionary* pDest = pRoot->GetDictBy("Dests"); | 1093 CPDF_Dictionary* pDest = pRoot->GetDictFor("Dests"); |
| 1094 if (!pDest) | 1094 if (!pDest) |
| 1095 return nullptr; | 1095 return nullptr; |
| 1096 | 1096 |
| 1097 pdfium::base::CheckedNumeric<int> checked_count = count; | 1097 pdfium::base::CheckedNumeric<int> checked_count = count; |
| 1098 checked_count += pDest->GetCount(); | 1098 checked_count += pDest->GetCount(); |
| 1099 if (!checked_count.IsValid() || index >= checked_count.ValueOrDie()) | 1099 if (!checked_count.IsValid() || index >= checked_count.ValueOrDie()) |
| 1100 return nullptr; | 1100 return nullptr; |
| 1101 | 1101 |
| 1102 index -= count; | 1102 index -= count; |
| 1103 int i = 0; | 1103 int i = 0; |
| 1104 for (const auto& it : *pDest) { | 1104 for (const auto& it : *pDest) { |
| 1105 bsName = it.first; | 1105 bsName = it.first; |
| 1106 pDestObj = it.second; | 1106 pDestObj = it.second; |
| 1107 if (!pDestObj) | 1107 if (!pDestObj) |
| 1108 continue; | 1108 continue; |
| 1109 if (i == index) | 1109 if (i == index) |
| 1110 break; | 1110 break; |
| 1111 i++; | 1111 i++; |
| 1112 } | 1112 } |
| 1113 } else { | 1113 } else { |
| 1114 pDestObj = nameTree.LookupValue(index, bsName); | 1114 pDestObj = nameTree.LookupValue(index, bsName); |
| 1115 } | 1115 } |
| 1116 if (!pDestObj) | 1116 if (!pDestObj) |
| 1117 return nullptr; | 1117 return nullptr; |
| 1118 if (CPDF_Dictionary* pDict = pDestObj->AsDictionary()) { | 1118 if (CPDF_Dictionary* pDict = pDestObj->AsDictionary()) { |
| 1119 pDestObj = pDict->GetArrayBy("D"); | 1119 pDestObj = pDict->GetArrayFor("D"); |
| 1120 if (!pDestObj) | 1120 if (!pDestObj) |
| 1121 return nullptr; | 1121 return nullptr; |
| 1122 } | 1122 } |
| 1123 if (!pDestObj->IsArray()) | 1123 if (!pDestObj->IsArray()) |
| 1124 return nullptr; | 1124 return nullptr; |
| 1125 | 1125 |
| 1126 CFX_WideString wsName = PDF_DecodeText(bsName); | 1126 CFX_WideString wsName = PDF_DecodeText(bsName); |
| 1127 CFX_ByteString utf16Name = wsName.UTF16LE_Encode(); | 1127 CFX_ByteString utf16Name = wsName.UTF16LE_Encode(); |
| 1128 int len = utf16Name.GetLength(); | 1128 int len = utf16Name.GetLength(); |
| 1129 if (!buffer) { | 1129 if (!buffer) { |
| 1130 *buflen = len; | 1130 *buflen = len; |
| 1131 } else if (*buflen >= len) { | 1131 } else if (*buflen >= len) { |
| 1132 memcpy(buffer, utf16Name.c_str(), len); | 1132 memcpy(buffer, utf16Name.c_str(), len); |
| 1133 *buflen = len; | 1133 *buflen = len; |
| 1134 } else { | 1134 } else { |
| 1135 *buflen = -1; | 1135 *buflen = -1; |
| 1136 } | 1136 } |
| 1137 return (FPDF_DEST)pDestObj; | 1137 return (FPDF_DEST)pDestObj; |
| 1138 } | 1138 } |
| OLD | NEW |