Add regression tests for a failure in FindPageIndex(). Bug: pdfium:1506 Change-Id: I141c263236dae9bf7910490404ada3f58c10c88b Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/68590 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdf_doc_embeddertest.cpp b/fpdfsdk/fpdf_doc_embeddertest.cpp index 84712ed..49c226e 100644 --- a/fpdfsdk/fpdf_doc_embeddertest.cpp +++ b/fpdfsdk/fpdf_doc_embeddertest.cpp
@@ -154,6 +154,44 @@ EXPECT_EQ(1, zoom); } +TEST_F(FPDFDocEmbedderTest, BUG_1506_1) { + ASSERT_TRUE(OpenDocument("bug_1506.pdf")); + + FPDF_DEST dest = FPDF_GetNamedDestByName(document(), "First"); + ASSERT_TRUE(dest); + EXPECT_EQ(3, FPDFDest_GetDestPageIndex(document(), dest)); +} + +TEST_F(FPDFDocEmbedderTest, BUG_1506_2) { + ASSERT_TRUE(OpenDocument("bug_1506.pdf")); + + std::vector<FPDF_PAGE> pages; + for (int i : {0, 2}) + pages.push_back(LoadPage(i)); + + FPDF_DEST dest = FPDF_GetNamedDestByName(document(), "First"); + ASSERT_TRUE(dest); + EXPECT_EQ(3, FPDFDest_GetDestPageIndex(document(), dest)); + + for (FPDF_PAGE page : pages) + UnloadPage(page); +} + +TEST_F(FPDFDocEmbedderTest, BUG_1506_3) { + ASSERT_TRUE(OpenDocument("bug_1506.pdf")); + + std::vector<FPDF_PAGE> pages; + for (int i : {0, 1, 3}) + pages.push_back(LoadPage(i)); + + FPDF_DEST dest = FPDF_GetNamedDestByName(document(), "First"); + ASSERT_TRUE(dest); + EXPECT_EQ(3, FPDFDest_GetDestPageIndex(document(), dest)); + + for (FPDF_PAGE page : pages) + UnloadPage(page); +} + TEST_F(FPDFDocEmbedderTest, BUG_680376) { EXPECT_TRUE(OpenDocument("bug_680376.pdf"));
diff --git a/testing/resources/bug_1506.in b/testing/resources/bug_1506.in new file mode 100644 index 0000000..63c4c4d --- /dev/null +++ b/testing/resources/bug_1506.in
@@ -0,0 +1,60 @@ +{{header}} +{{object 1 0}} << + /Type /Catalog + /Pages 2 0 R + /Names << + /Dests 7 0 R + >> +>> +endobj +{{object 2 0}} << + /Type /Pages + /Count 4 + /Kids [ + 3 0 R + 4 0 R + ] +>> +endobj +{{object 3 0}} << + /Type /Pages + /Parent 2 0 R + /Count 2 + /Kids [ + 5 0 R + 5 0 R + ] +>> +endobj +{{object 4 0}} << + /Type /Pages + /Parent 2 0 R + /Count 2 + /Kids [ + 5 0 R + 6 0 R + ] +>> +endobj +{{object 5 0}} << + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 100 200] +>> +endobj +{{object 6 0}} << + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 100 300] +>> +endobj +{{object 7 0}} << + /Names [ + (First) [6 0 R] + ] +>> +endobj +{{xref}} +{{trailer}} +{{startxref}} +%%EOF
diff --git a/testing/resources/bug_1506.pdf b/testing/resources/bug_1506.pdf new file mode 100644 index 0000000..7395fe1 --- /dev/null +++ b/testing/resources/bug_1506.pdf
@@ -0,0 +1,74 @@ +%PDF-1.7 +% ò¤ô +1 0 obj << + /Type /Catalog + /Pages 2 0 R + /Names << + /Dests 7 0 R + >> +>> +endobj +2 0 obj << + /Type /Pages + /Count 4 + /Kids [ + 3 0 R + 4 0 R + ] +>> +endobj +3 0 obj << + /Type /Pages + /Parent 2 0 R + /Count 2 + /Kids [ + 5 0 R + 5 0 R + ] +>> +endobj +4 0 obj << + /Type /Pages + /Parent 2 0 R + /Count 2 + /Kids [ + 5 0 R + 6 0 R + ] +>> +endobj +5 0 obj << + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 100 200] +>> +endobj +6 0 obj << + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 100 300] +>> +endobj +7 0 obj << + /Names [ + (First) [6 0 R] + ] +>> +endobj +xref +0 8 +0000000000 65535 f +0000000015 00000 n +0000000102 00000 n +0000000183 00000 n +0000000280 00000 n +0000000377 00000 n +0000000454 00000 n +0000000531 00000 n +trailer << + /Root 1 0 R + /Size 8 +>> +startxref +587 +%%EOF