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 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 } | 263 } |
264 | 264 |
265 // jabdelmalek: changed return type from FX_DWORD to build on Linux (and match | 265 // jabdelmalek: changed return type from FX_DWORD to build on Linux (and match |
266 // header). | 266 // header). |
267 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) { | 267 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) { |
268 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); | 268 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
269 if (!pDoc) | 269 if (!pDoc) |
270 return 0; | 270 return 0; |
271 | 271 |
272 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); | 272 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); |
273 return pDict ? pDict->GetInteger("P") : (FX_DWORD)-1; | 273 return pDict ? pDict->GetIntegerBy("P") : (FX_DWORD)-1; |
274 } | 274 } |
275 | 275 |
276 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { | 276 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { |
277 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); | 277 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
278 if (!pDoc) | 278 if (!pDoc) |
279 return -1; | 279 return -1; |
280 | 280 |
281 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); | 281 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); |
282 return pDict ? pDict->GetInteger("R") : -1; | 282 return pDict ? pDict->GetIntegerBy("R") : -1; |
283 } | 283 } |
284 | 284 |
285 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { | 285 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { |
286 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); | 286 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); |
287 return pDoc ? pDoc->GetPageCount() : 0; | 287 return pDoc ? pDoc->GetPageCount() : 0; |
288 } | 288 } |
289 | 289 |
290 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, | 290 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, |
291 int page_index) { | 291 int page_index) { |
292 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); | 292 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); |
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); | 825 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
826 if (!pDoc) | 826 if (!pDoc) |
827 return 0; | 827 return 0; |
828 | 828 |
829 CPDF_Dictionary* pRoot = pDoc->GetRoot(); | 829 CPDF_Dictionary* pRoot = pDoc->GetRoot(); |
830 if (!pRoot) | 830 if (!pRoot) |
831 return 0; | 831 return 0; |
832 | 832 |
833 CPDF_NameTree nameTree(pDoc, "Dests"); | 833 CPDF_NameTree nameTree(pDoc, "Dests"); |
834 pdfium::base::CheckedNumeric<FPDF_DWORD> count = nameTree.GetCount(); | 834 pdfium::base::CheckedNumeric<FPDF_DWORD> count = nameTree.GetCount(); |
835 CPDF_Dictionary* pDest = pRoot->GetDict("Dests"); | 835 CPDF_Dictionary* pDest = pRoot->GetDictBy("Dests"); |
836 if (pDest) | 836 if (pDest) |
837 count += pDest->GetCount(); | 837 count += pDest->GetCount(); |
838 | 838 |
839 if (!count.IsValid()) | 839 if (!count.IsValid()) |
840 return 0; | 840 return 0; |
841 | 841 |
842 return count.ValueOrDie(); | 842 return count.ValueOrDie(); |
843 } | 843 } |
844 | 844 |
845 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, | 845 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, |
(...skipping 25 matching lines...) Expand all Loading... |
871 | 871 |
872 CPDF_Dictionary* pRoot = pDoc->GetRoot(); | 872 CPDF_Dictionary* pRoot = pDoc->GetRoot(); |
873 if (!pRoot) | 873 if (!pRoot) |
874 return nullptr; | 874 return nullptr; |
875 | 875 |
876 CPDF_Object* pDestObj = nullptr; | 876 CPDF_Object* pDestObj = nullptr; |
877 CFX_ByteString bsName; | 877 CFX_ByteString bsName; |
878 CPDF_NameTree nameTree(pDoc, "Dests"); | 878 CPDF_NameTree nameTree(pDoc, "Dests"); |
879 int count = nameTree.GetCount(); | 879 int count = nameTree.GetCount(); |
880 if (index >= count) { | 880 if (index >= count) { |
881 CPDF_Dictionary* pDest = pRoot->GetDict("Dests"); | 881 CPDF_Dictionary* pDest = pRoot->GetDictBy("Dests"); |
882 if (!pDest) | 882 if (!pDest) |
883 return nullptr; | 883 return nullptr; |
884 | 884 |
885 pdfium::base::CheckedNumeric<int> checked_count = count; | 885 pdfium::base::CheckedNumeric<int> checked_count = count; |
886 checked_count += pDest->GetCount(); | 886 checked_count += pDest->GetCount(); |
887 if (!checked_count.IsValid() || index >= checked_count.ValueOrDie()) | 887 if (!checked_count.IsValid() || index >= checked_count.ValueOrDie()) |
888 return nullptr; | 888 return nullptr; |
889 | 889 |
890 index -= count; | 890 index -= count; |
891 int i = 0; | 891 int i = 0; |
892 for (const auto& it : *pDest) { | 892 for (const auto& it : *pDest) { |
893 bsName = it.first; | 893 bsName = it.first; |
894 pDestObj = it.second; | 894 pDestObj = it.second; |
895 if (!pDestObj) | 895 if (!pDestObj) |
896 continue; | 896 continue; |
897 if (i == index) | 897 if (i == index) |
898 break; | 898 break; |
899 i++; | 899 i++; |
900 } | 900 } |
901 } else { | 901 } else { |
902 pDestObj = nameTree.LookupValue(index, bsName); | 902 pDestObj = nameTree.LookupValue(index, bsName); |
903 } | 903 } |
904 if (!pDestObj) | 904 if (!pDestObj) |
905 return nullptr; | 905 return nullptr; |
906 if (CPDF_Dictionary* pDict = pDestObj->AsDictionary()) { | 906 if (CPDF_Dictionary* pDict = pDestObj->AsDictionary()) { |
907 pDestObj = pDict->GetArray("D"); | 907 pDestObj = pDict->GetArrayBy("D"); |
908 if (!pDestObj) | 908 if (!pDestObj) |
909 return nullptr; | 909 return nullptr; |
910 } | 910 } |
911 if (!pDestObj->IsArray()) | 911 if (!pDestObj->IsArray()) |
912 return nullptr; | 912 return nullptr; |
913 | 913 |
914 CFX_WideString wsName = PDF_DecodeText(bsName); | 914 CFX_WideString wsName = PDF_DecodeText(bsName); |
915 CFX_ByteString utf16Name = wsName.UTF16LE_Encode(); | 915 CFX_ByteString utf16Name = wsName.UTF16LE_Encode(); |
916 unsigned int len = utf16Name.GetLength(); | 916 unsigned int len = utf16Name.GetLength(); |
917 if (!buffer) { | 917 if (!buffer) { |
918 *buflen = len; | 918 *buflen = len; |
919 } else if (*buflen >= len) { | 919 } else if (*buflen >= len) { |
920 memcpy(buffer, utf16Name.c_str(), len); | 920 memcpy(buffer, utf16Name.c_str(), len); |
921 *buflen = len; | 921 *buflen = len; |
922 } else { | 922 } else { |
923 *buflen = -1; | 923 *buflen = -1; |
924 } | 924 } |
925 return (FPDF_DEST)pDestObj; | 925 return (FPDF_DEST)pDestObj; |
926 } | 926 } |
OLD | NEW |