| 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 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 | 340 |
| 341 CPDF_Document* pdfDoc = | 341 CPDF_Document* pdfDoc = |
| 342 (static_cast<CPDFXFA_Document*>(document))->GetPDFDoc(); | 342 (static_cast<CPDFXFA_Document*>(document))->GetPDFDoc(); |
| 343 if (!pdfDoc) | 343 if (!pdfDoc) |
| 344 return FALSE; | 344 return FALSE; |
| 345 | 345 |
| 346 CPDF_Dictionary* pRoot = pdfDoc->GetRoot(); | 346 CPDF_Dictionary* pRoot = pdfDoc->GetRoot(); |
| 347 if (!pRoot) | 347 if (!pRoot) |
| 348 return FALSE; | 348 return FALSE; |
| 349 | 349 |
| 350 CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); | 350 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); |
| 351 if (!pAcroForm) | 351 if (!pAcroForm) |
| 352 return FALSE; | 352 return FALSE; |
| 353 | 353 |
| 354 CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); | 354 CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); |
| 355 if (!pXFA) | 355 if (!pXFA) |
| 356 return FALSE; | 356 return FALSE; |
| 357 | 357 |
| 358 FX_BOOL bDynamicXFA = pRoot->GetBoolean("NeedsRendering", FALSE); | 358 FX_BOOL bDynamicXFA = pRoot->GetBooleanBy("NeedsRendering", FALSE); |
| 359 | 359 |
| 360 if (bDynamicXFA) | 360 if (bDynamicXFA) |
| 361 *docType = DOCTYPE_DYNAMIC_XFA; | 361 *docType = DOCTYPE_DYNAMIC_XFA; |
| 362 else | 362 else |
| 363 *docType = DOCTYPE_STATIC_XFA; | 363 *docType = DOCTYPE_STATIC_XFA; |
| 364 | 364 |
| 365 return TRUE; | 365 return TRUE; |
| 366 } | 366 } |
| 367 | 367 |
| 368 DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) { | 368 DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) { |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) { | 456 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) { |
| 457 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); | 457 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 458 if (!pDoc) | 458 if (!pDoc) |
| 459 #ifndef PDF_ENABLE_XFA | 459 #ifndef PDF_ENABLE_XFA |
| 460 return 0; | 460 return 0; |
| 461 #else // PDF_ENABLE_XFA | 461 #else // PDF_ENABLE_XFA |
| 462 return (FX_DWORD)-1; | 462 return (FX_DWORD)-1; |
| 463 #endif // PDF_ENABLE_XFA | 463 #endif // PDF_ENABLE_XFA |
| 464 | 464 |
| 465 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); | 465 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); |
| 466 return pDict ? pDict->GetInteger("P") : (FX_DWORD)-1; | 466 return pDict ? pDict->GetIntegerBy("P") : (FX_DWORD)-1; |
| 467 } | 467 } |
| 468 | 468 |
| 469 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { | 469 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { |
| 470 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); | 470 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 471 if (!pDoc) | 471 if (!pDoc) |
| 472 return -1; | 472 return -1; |
| 473 | 473 |
| 474 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); | 474 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); |
| 475 return pDict ? pDict->GetInteger("R") : -1; | 475 return pDict ? pDict->GetIntegerBy("R") : -1; |
| 476 } | 476 } |
| 477 | 477 |
| 478 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { | 478 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { |
| 479 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); | 479 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); |
| 480 return pDoc ? pDoc->GetPageCount() : 0; | 480 return pDoc ? pDoc->GetPageCount() : 0; |
| 481 } | 481 } |
| 482 | 482 |
| 483 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, | 483 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, |
| 484 int page_index) { | 484 int page_index) { |
| 485 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); | 485 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); |
| (...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1047 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); | 1047 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 1048 if (!pDoc) | 1048 if (!pDoc) |
| 1049 return 0; | 1049 return 0; |
| 1050 | 1050 |
| 1051 CPDF_Dictionary* pRoot = pDoc->GetRoot(); | 1051 CPDF_Dictionary* pRoot = pDoc->GetRoot(); |
| 1052 if (!pRoot) | 1052 if (!pRoot) |
| 1053 return 0; | 1053 return 0; |
| 1054 | 1054 |
| 1055 CPDF_NameTree nameTree(pDoc, "Dests"); | 1055 CPDF_NameTree nameTree(pDoc, "Dests"); |
| 1056 pdfium::base::CheckedNumeric<FPDF_DWORD> count = nameTree.GetCount(); | 1056 pdfium::base::CheckedNumeric<FPDF_DWORD> count = nameTree.GetCount(); |
| 1057 CPDF_Dictionary* pDest = pRoot->GetDict("Dests"); | 1057 CPDF_Dictionary* pDest = pRoot->GetDictBy("Dests"); |
| 1058 if (pDest) | 1058 if (pDest) |
| 1059 count += pDest->GetCount(); | 1059 count += pDest->GetCount(); |
| 1060 | 1060 |
| 1061 if (!count.IsValid()) | 1061 if (!count.IsValid()) |
| 1062 return 0; | 1062 return 0; |
| 1063 | 1063 |
| 1064 return count.ValueOrDie(); | 1064 return count.ValueOrDie(); |
| 1065 } | 1065 } |
| 1066 | 1066 |
| 1067 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, | 1067 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1147 | 1147 |
| 1148 CPDF_Dictionary* pRoot = pDoc->GetRoot(); | 1148 CPDF_Dictionary* pRoot = pDoc->GetRoot(); |
| 1149 if (!pRoot) | 1149 if (!pRoot) |
| 1150 return nullptr; | 1150 return nullptr; |
| 1151 | 1151 |
| 1152 CPDF_Object* pDestObj = nullptr; | 1152 CPDF_Object* pDestObj = nullptr; |
| 1153 CFX_ByteString bsName; | 1153 CFX_ByteString bsName; |
| 1154 CPDF_NameTree nameTree(pDoc, "Dests"); | 1154 CPDF_NameTree nameTree(pDoc, "Dests"); |
| 1155 int count = nameTree.GetCount(); | 1155 int count = nameTree.GetCount(); |
| 1156 if (index >= count) { | 1156 if (index >= count) { |
| 1157 CPDF_Dictionary* pDest = pRoot->GetDict("Dests"); | 1157 CPDF_Dictionary* pDest = pRoot->GetDictBy("Dests"); |
| 1158 if (!pDest) | 1158 if (!pDest) |
| 1159 return nullptr; | 1159 return nullptr; |
| 1160 | 1160 |
| 1161 pdfium::base::CheckedNumeric<int> checked_count = count; | 1161 pdfium::base::CheckedNumeric<int> checked_count = count; |
| 1162 checked_count += pDest->GetCount(); | 1162 checked_count += pDest->GetCount(); |
| 1163 if (!checked_count.IsValid() || index >= checked_count.ValueOrDie()) | 1163 if (!checked_count.IsValid() || index >= checked_count.ValueOrDie()) |
| 1164 return nullptr; | 1164 return nullptr; |
| 1165 | 1165 |
| 1166 index -= count; | 1166 index -= count; |
| 1167 int i = 0; | 1167 int i = 0; |
| 1168 for (const auto& it : *pDest) { | 1168 for (const auto& it : *pDest) { |
| 1169 bsName = it.first; | 1169 bsName = it.first; |
| 1170 pDestObj = it.second; | 1170 pDestObj = it.second; |
| 1171 if (!pDestObj) | 1171 if (!pDestObj) |
| 1172 continue; | 1172 continue; |
| 1173 if (i == index) | 1173 if (i == index) |
| 1174 break; | 1174 break; |
| 1175 i++; | 1175 i++; |
| 1176 } | 1176 } |
| 1177 } else { | 1177 } else { |
| 1178 pDestObj = nameTree.LookupValue(index, bsName); | 1178 pDestObj = nameTree.LookupValue(index, bsName); |
| 1179 } | 1179 } |
| 1180 if (!pDestObj) | 1180 if (!pDestObj) |
| 1181 return nullptr; | 1181 return nullptr; |
| 1182 if (CPDF_Dictionary* pDict = pDestObj->AsDictionary()) { | 1182 if (CPDF_Dictionary* pDict = pDestObj->AsDictionary()) { |
| 1183 pDestObj = pDict->GetArray("D"); | 1183 pDestObj = pDict->GetArrayBy("D"); |
| 1184 if (!pDestObj) | 1184 if (!pDestObj) |
| 1185 return nullptr; | 1185 return nullptr; |
| 1186 } | 1186 } |
| 1187 if (!pDestObj->IsArray()) | 1187 if (!pDestObj->IsArray()) |
| 1188 return nullptr; | 1188 return nullptr; |
| 1189 | 1189 |
| 1190 CFX_WideString wsName = PDF_DecodeText(bsName); | 1190 CFX_WideString wsName = PDF_DecodeText(bsName); |
| 1191 CFX_ByteString utf16Name = wsName.UTF16LE_Encode(); | 1191 CFX_ByteString utf16Name = wsName.UTF16LE_Encode(); |
| 1192 unsigned int len = utf16Name.GetLength(); | 1192 unsigned int len = utf16Name.GetLength(); |
| 1193 if (!buffer) { | 1193 if (!buffer) { |
| 1194 *buflen = len; | 1194 *buflen = len; |
| 1195 } else if (*buflen >= len) { | 1195 } else if (*buflen >= len) { |
| 1196 memcpy(buffer, utf16Name.c_str(), len); | 1196 memcpy(buffer, utf16Name.c_str(), len); |
| 1197 *buflen = len; | 1197 *buflen = len; |
| 1198 } else { | 1198 } else { |
| 1199 *buflen = -1; | 1199 *buflen = -1; |
| 1200 } | 1200 } |
| 1201 return (FPDF_DEST)pDestObj; | 1201 return (FPDF_DEST)pDestObj; |
| 1202 } | 1202 } |
| OLD | NEW |