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