Modified embeddertests for FPDF_StructElement.

- Added title "TitleText" to test file tagged_alt_text.in and built
  matching binary file tagged_alt_text.pdf.
- Added embeddertest for FPDF_StructElement_GetTitle().
- Added checks for nullptr parameters for the test of
  FPDF_StructElement_GetType().

BUG=pdfium:1242

Change-Id: I993bf40c3dff3773bafb546887d24661624fac0a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/54492
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdf_structtree_embeddertest.cpp b/fpdfsdk/fpdf_structtree_embeddertest.cpp
index a754c08..c68e2eb 100644
--- a/fpdfsdk/fpdf_structtree_embeddertest.cpp
+++ b/fpdfsdk/fpdf_structtree_embeddertest.cpp
@@ -107,7 +107,12 @@
         FPDF_StructTree_GetChildAtIndex(struct_tree.get(), 0);
     ASSERT_NE(nullptr, element);
 
+    // test nullptr inputs
     unsigned short buffer[12];
+    ASSERT_EQ(0U, FPDF_StructElement_GetType(nullptr, buffer, sizeof(buffer)));
+    ASSERT_EQ(0U, FPDF_StructElement_GetType(nullptr, nullptr, 0));
+    ASSERT_EQ(18U, FPDF_StructElement_GetType(element, nullptr, 0));
+
     memset(buffer, 0, sizeof(buffer));
     // Deliberately pass in a small buffer size to make sure |buffer| remains
     // untouched.
@@ -123,3 +128,41 @@
 
   UnloadPage(page);
 }
+
+TEST_F(FPDFStructTreeEmbedderTest, GetTitle) {
+  ASSERT_TRUE(OpenDocument("tagged_alt_text.pdf"));
+  FPDF_PAGE page = LoadPage(0);
+  ASSERT_TRUE(page);
+
+  {
+    ScopedFPDFStructTree struct_tree(FPDF_StructTree_GetForPage(page));
+    ASSERT_TRUE(struct_tree);
+    ASSERT_EQ(1, FPDF_StructTree_CountChildren(struct_tree.get()));
+
+    FPDF_STRUCTELEMENT element =
+        FPDF_StructTree_GetChildAtIndex(struct_tree.get(), 0);
+    ASSERT_NE(nullptr, element);
+
+    // test nullptr inputs
+    unsigned short buffer[12];
+    ASSERT_EQ(0U, FPDF_StructElement_GetTitle(nullptr, buffer, sizeof(buffer)));
+    ASSERT_EQ(0U, FPDF_StructElement_GetTitle(nullptr, nullptr, 0));
+    ASSERT_EQ(20U, FPDF_StructElement_GetTitle(element, nullptr, 0));
+
+    memset(buffer, 0, sizeof(buffer));
+    // Deliberately pass in a small buffer size to make sure |buffer| remains
+    // untouched.
+    ASSERT_EQ(20U, FPDF_StructElement_GetTitle(element, buffer, 1));
+    for (size_t i = 0; i < FX_ArraySize(buffer); ++i)
+      EXPECT_EQ(0U, buffer[i]);
+
+    ASSERT_EQ(20U,
+              FPDF_StructElement_GetTitle(element, buffer, sizeof(buffer)));
+
+    const wchar_t kExpected[] = L"TitleText";
+    EXPECT_EQ(WideString(kExpected),
+              WideString::FromUTF16LE(buffer, FXSYS_len(kExpected)));
+  }
+
+  UnloadPage(page);
+}
diff --git a/testing/resources/tagged_alt_text.in b/testing/resources/tagged_alt_text.in
index c092540..7ea5ac0 100644
--- a/testing/resources/tagged_alt_text.in
+++ b/testing/resources/tagged_alt_text.in
@@ -128,6 +128,7 @@
   /Type /StructElem
   /S /Document
   /K [12 0 R]
+  /T (TitleText)
   /P 8 0 R
   /Pg 3 0 R
 >>
diff --git a/testing/resources/tagged_alt_text.pdf b/testing/resources/tagged_alt_text.pdf
index 7f44e98..73b4988 100644
--- a/testing/resources/tagged_alt_text.pdf
+++ b/testing/resources/tagged_alt_text.pdf
@@ -129,6 +129,7 @@
   /Type /StructElem
   /S /Document
   /K [12 0 R]
+  /T (TitleText)
   /P 8 0 R
   /Pg 3 0 R
 >>
@@ -169,13 +170,13 @@
 0000001412 00000 n 
 0000001454 00000 n 
 0000001612 00000 n 
-0000001706 00000 n 
-0000001813 00000 n 
-0000001931 00000 n 
+0000001723 00000 n 
+0000001830 00000 n 
+0000001948 00000 n 
 trailer <<
   /Root 1 0 R
   /Size 15
 >>
 startxref
-1986
+2003
 %%EOF