From 71a7d377ff36a0be1af1848d5cac0ccb83ae725d Mon Sep 17 00:00:00 2001 From: Henrique Nakashima Date: Thu, 1 Feb 2018 17:07:13 +0000 Subject: Deprecate FPDFDest_GetPageIndex and create a fixed version. FPDFDest_GetDestPageIndex() has a well defined return value for errors (-1). Keeping FPDFDest_GetPageIndex() to avoid changing behavior of the old API for whoever relies on it. Bug: pdfium:938 Change-Id: Iad528923cb156e957a419540c262a65f45cb777d Reviewed-on: https://pdfium-review.googlesource.com/24811 Commit-Queue: Henrique Nakashima Reviewed-by: Lei Zhang --- fpdfsdk/fpdfdoc.cpp | 23 +++++++++++++++++++---- fpdfsdk/fpdfdoc_embeddertest.cpp | 7 +++++++ fpdfsdk/fpdfview_c_api_test.c | 1 + fpdfsdk/fsdk_actionhandler.cpp | 2 +- 4 files changed, 28 insertions(+), 5 deletions(-) (limited to 'fpdfsdk') diff --git a/fpdfsdk/fpdfdoc.cpp b/fpdfsdk/fpdfdoc.cpp index 47ecf4223b..4b51d6391d 100644 --- a/fpdfsdk/fpdfdoc.cpp +++ b/fpdfsdk/fpdfdoc.cpp @@ -200,14 +200,29 @@ FPDFAction_GetURIPath(FPDF_DOCUMENT document, } FPDF_EXPORT unsigned long FPDF_CALLCONV -FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST pDict) { - if (!pDict) +FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST pDest) { + if (!pDest) return 0; + CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); if (!pDoc) return 0; - CPDF_Dest dest(static_cast(pDict)); - return dest.GetPageIndex(pDoc); + + CPDF_Dest dest(static_cast(pDest)); + return dest.GetPageIndexDeprecated(pDoc); +} + +FPDF_EXPORT long FPDF_CALLCONV FPDFDest_GetDestPageIndex(FPDF_DOCUMENT document, + FPDF_DEST pDest) { + if (!pDest) + return -1; + + CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); + if (!pDoc) + return -1; + + CPDF_Dest dest(static_cast(pDest)); + return dest.GetDestPageIndex(pDoc); } FPDF_EXPORT unsigned long FPDF_CALLCONV diff --git a/fpdfsdk/fpdfdoc_embeddertest.cpp b/fpdfsdk/fpdfdoc_embeddertest.cpp index d346330486..abe3d8c646 100644 --- a/fpdfsdk/fpdfdoc_embeddertest.cpp +++ b/fpdfsdk/fpdfdoc_embeddertest.cpp @@ -20,26 +20,31 @@ TEST_F(FPDFDocEmbeddertest, DestGetPageIndex) { // NULL FPDF_DEST case. EXPECT_EQ(0U, FPDFDest_GetPageIndex(document(), nullptr)); + EXPECT_EQ(-1, FPDFDest_GetDestPageIndex(document(), nullptr)); // Page number directly in item from Dests NameTree. FPDF_DEST dest = FPDF_GetNamedDestByName(document(), "First"); EXPECT_TRUE(dest); EXPECT_EQ(1U, FPDFDest_GetPageIndex(document(), dest)); + EXPECT_EQ(1, FPDFDest_GetDestPageIndex(document(), dest)); // Page number via object reference in item from Dests NameTree. dest = FPDF_GetNamedDestByName(document(), "Next"); EXPECT_TRUE(dest); EXPECT_EQ(1U, FPDFDest_GetPageIndex(document(), dest)); + EXPECT_EQ(1, FPDFDest_GetDestPageIndex(document(), dest)); // Page number directly in item from Dests dictionary. dest = FPDF_GetNamedDestByName(document(), "FirstAlternate"); EXPECT_TRUE(dest); EXPECT_EQ(11U, FPDFDest_GetPageIndex(document(), dest)); + EXPECT_EQ(11, FPDFDest_GetDestPageIndex(document(), dest)); // Invalid object reference in item from Dests NameTree. dest = FPDF_GetNamedDestByName(document(), "LastAlternate"); EXPECT_TRUE(dest); EXPECT_EQ(0U, FPDFDest_GetPageIndex(document(), dest)); + EXPECT_EQ(-1, FPDFDest_GetDestPageIndex(document(), dest)); } TEST_F(FPDFDocEmbeddertest, DestGetView) { @@ -106,6 +111,7 @@ TEST_F(FPDFDocEmbeddertest, DestGetLocationInPage) { // NULL FPDF_DEST case. EXPECT_EQ(0U, FPDFDest_GetPageIndex(document(), nullptr)); + EXPECT_EQ(-1, FPDFDest_GetDestPageIndex(document(), nullptr)); FPDF_DEST dest = FPDF_GetNamedDestByName(document(), "First"); EXPECT_TRUE(dest); @@ -134,6 +140,7 @@ TEST_F(FPDFDocEmbeddertest, BUG_680376) { EXPECT_TRUE(dest); EXPECT_EQ(static_cast(-1), FPDFDest_GetPageIndex(document(), dest)); + EXPECT_EQ(-1, FPDFDest_GetDestPageIndex(document(), dest)); } TEST_F(FPDFDocEmbeddertest, ActionGetFilePath) { diff --git a/fpdfsdk/fpdfview_c_api_test.c b/fpdfsdk/fpdfview_c_api_test.c index abffb7676f..193050e84a 100644 --- a/fpdfsdk/fpdfview_c_api_test.c +++ b/fpdfsdk/fpdfview_c_api_test.c @@ -107,6 +107,7 @@ int CheckPDFiumCApi() { CHK(FPDFAction_GetDest); CHK(FPDFAction_GetFilePath); CHK(FPDFAction_GetURIPath); + CHK(FPDFDest_GetDestPageIndex); CHK(FPDFDest_GetPageIndex); CHK(FPDFDest_GetLocationInPage); CHK(FPDFDest_GetView); diff --git a/fpdfsdk/fsdk_actionhandler.cpp b/fpdfsdk/fsdk_actionhandler.cpp index 0059bb919c..49e00411b8 100644 --- a/fpdfsdk/fsdk_actionhandler.cpp +++ b/fpdfsdk/fsdk_actionhandler.cpp @@ -362,7 +362,7 @@ void CPDFSDK_ActionHandler::DoAction_GoTo( ASSERT(pPDFDocument); CPDF_Dest MyDest = action.GetDest(pPDFDocument); - int nPageIndex = MyDest.GetPageIndex(pPDFDocument); + int nPageIndex = MyDest.GetPageIndexDeprecated(pPDFDocument); int nFitType = MyDest.GetZoomMode(); const CPDF_Array* pMyArray = ToArray(MyDest.GetObject()); std::vector posArray; -- cgit v1.2.3