Index: fpdfsdk/src/fpdfview.cpp |
diff --git a/fpdfsdk/src/fpdfview.cpp b/fpdfsdk/src/fpdfview.cpp |
index fc16147cfa76e0b175a03b67bfe902754b73c3d7..5d9bf4b2522f71198c655b999798b9ca540deb6c 100644 |
--- a/fpdfsdk/src/fpdfview.cpp |
+++ b/fpdfsdk/src/fpdfview.cpp |
@@ -22,6 +22,10 @@ |
#include "../include/fpdfxfa/fpdfxfa_util.h" |
#include "../include/javascript/IJavaScript.h" |
+CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc) { |
+ return doc ? static_cast<CPDFXFA_Document*>(doc)->GetPDFDoc() : nullptr; |
+} |
+ |
CFPDF_FileStream::CFPDF_FileStream(FPDF_FILEHANDLER* pFS) { |
m_pFS = pFS; |
m_nCurPos = 0; |
@@ -375,17 +379,18 @@ FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess, |
DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, |
int* fileVersion) { |
- if (!doc || !fileVersion) |
+ if (!fileVersion) |
return FALSE; |
+ |
*fileVersion = 0; |
- CPDFXFA_Document* pDoc = (CPDFXFA_Document*)doc; |
- CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); |
- if (!pPDFDoc) |
- return (FX_DWORD)-1; |
- CPDF_Parser* pParser = (CPDF_Parser*)pPDFDoc->GetParser(); |
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(doc); |
+ if (!pDoc) |
+ return FALSE; |
+ CPDF_Parser* pParser = pDoc->GetParser(); |
if (!pParser) |
return FALSE; |
+ |
*fileVersion = pParser->GetFileVersion(); |
return TRUE; |
} |
@@ -393,48 +398,37 @@ DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, |
// jabdelmalek: changed return type from FX_DWORD to build on Linux (and match |
// header). |
DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) { |
- if (document == NULL) |
- return 0; |
- CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; |
- CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); |
- if (!pPDFDoc) |
- return (FX_DWORD)-1; |
- CPDF_Parser* pParser = (CPDF_Parser*)pPDFDoc->GetParser(); |
- CPDF_Dictionary* pDict = pParser->GetEncryptDict(); |
- if (pDict == NULL) |
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
+ if (!pDoc) |
return (FX_DWORD)-1; |
- return pDict->GetInteger("P"); |
+ CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); |
+ return pDict ? pDict->GetInteger("P") : (FX_DWORD)-1; |
} |
DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { |
- if (document == NULL) |
- return -1; |
- CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); |
- CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); |
- CPDF_Dictionary* pDict = pParser->GetEncryptDict(); |
- if (pDict == NULL) |
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
+ if (!pDoc) |
return -1; |
- return pDict->GetInteger("R"); |
+ CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); |
+ return pDict ? pDict->GetInteger("R") : -1; |
} |
DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { |
- if (document == NULL) |
- return 0; |
- CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; |
- return pDoc->GetPageCount(); |
- // return ((CPDF_Document*)document)->GetPageCount(); |
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
+ return pDoc ? pDoc->GetPageCount() : 0; |
} |
DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, |
int page_index) { |
- if (document == NULL) |
- return NULL; |
- CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; |
- if (page_index < 0 || page_index >= pDoc->GetPageCount()) |
- return NULL; |
- // CPDF_Parser* pParser = (CPDF_Parser*)document; |
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
+ if (!pDoc) |
+ return nullptr; |
+ |
+ if (page_index < 0 || page_index >= FPDF_GetPageCount(document)) |
+ return nullptr; |
+ |
return pDoc->GetPage(page_index); |
} |
@@ -673,11 +667,7 @@ DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) { |
} |
DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) { |
- if (!document) |
- return; |
- |
- CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; |
- delete pDoc; |
+ delete CPDFDocumentFromFPDFDocument(document); |
} |
DLLEXPORT unsigned long STDCALL FPDF_GetLastError() { |
@@ -899,18 +889,15 @@ DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document, |
DLLEXPORT FPDF_BOOL STDCALL |
FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) { |
- CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; |
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
if (!pDoc) |
return TRUE; |
- CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); |
- if (!pPDFDoc) |
- return TRUE; |
- CPDF_ViewerPreferences viewRef(pPDFDoc); |
+ CPDF_ViewerPreferences viewRef(pDoc); |
return viewRef.PrintScaling(); |
} |
DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) { |
- CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); |
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
if (!pDoc) |
return 1; |
CPDF_ViewerPreferences viewRef(pDoc); |
@@ -919,7 +906,7 @@ DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) { |
DLLEXPORT FPDF_PAGERANGE STDCALL |
FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) { |
- CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); |
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
if (!pDoc) |
return NULL; |
CPDF_ViewerPreferences viewRef(pDoc); |
@@ -928,7 +915,7 @@ FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) { |
DLLEXPORT FPDF_DUPLEXTYPE STDCALL |
FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) { |
- CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); |
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
if (!pDoc) |
return DuplexUndefined; |
CPDF_ViewerPreferences viewRef(pDoc); |
@@ -943,9 +930,9 @@ FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) { |
} |
DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) { |
- if (!document) |
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
+ if (!pDoc) |
return 0; |
- CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); |
CPDF_Dictionary* pRoot = pDoc->GetRoot(); |
if (!pRoot) |
@@ -961,17 +948,15 @@ DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) { |
DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, |
FPDF_BYTESTRING name) { |
- if (!document) |
- return NULL; |
if (!name || name[0] == 0) |
- return NULL; |
+ return nullptr; |
- CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; |
- CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); |
- if (!pPDFDoc) |
- return NULL; |
- CPDF_NameTree name_tree(pPDFDoc, FX_BSTRC("Dests")); |
- return name_tree.LookupNamedDest(pPDFDoc, name); |
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
+ if (!pDoc) |
+ return nullptr; |
+ |
+ CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests")); |
+ return name_tree.LookupNamedDest(pDoc, name); |
} |
FPDF_RESULT FPDF_BStr_Init(FPDF_BSTR* str) { |