| 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 |