Add FPDFText_GetLooseCharBox() test case for diacritics

Demonstrate a bug where FPDFText_GetLooseCharBox() returns a char box
that does not contain diacritics.

Bug: 395640955
Change-Id: I7c121082104e6291131143ba35e87b5f4a472820
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/128670
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
diff --git a/fpdfsdk/fpdf_text_embeddertest.cpp b/fpdfsdk/fpdf_text_embeddertest.cpp
index af9f307..c141aec 100644
--- a/fpdfsdk/fpdf_text_embeddertest.cpp
+++ b/fpdfsdk/fpdf_text_embeddertest.cpp
@@ -1923,6 +1923,46 @@
   EXPECT_NEAR(kExpectedLooseCharWidth, rect.top - rect.bottom, 0.001f);
 }
 
+TEST_F(FPDFTextEmbedderTest, CharBoxForLatinExtendedText) {
+  ASSERT_TRUE(OpenDocument("latin_extended.pdf"));
+  ScopedEmbedderTestPage page = LoadScopedPage(0);
+  ASSERT_TRUE(page);
+
+  ScopedFPDFTextPage text_page(FPDFText_LoadPage(page.get()));
+  ASSERT_TRUE(text_page);
+
+  EXPECT_EQ(u'Ā', FPDFText_GetUnicode(text_page.get(), 0));
+
+  double left;
+  double right;
+  double bottom;
+  double top;
+  ASSERT_TRUE(
+      FPDFText_GetCharBox(text_page.get(), 0, &left, &right, &bottom, &top));
+  EXPECT_NEAR(7.512, right - left, 0.001);
+  EXPECT_NEAR(10.488, top - bottom, 0.001);
+  EXPECT_NEAR(750.238, top, 0.001);
+
+  FS_RECTF rect;
+  ASSERT_TRUE(FPDFText_GetLooseCharBox(text_page.get(), 0, &rect));
+  EXPECT_NEAR(7.824f, rect.right - rect.left, 0.001f);
+  EXPECT_NEAR(12.0f, rect.top - rect.bottom, 0.001f);
+  EXPECT_NEAR(749.25f, rect.top, 0.001f);
+
+  EXPECT_EQ(u'Ă', FPDFText_GetUnicode(text_page.get(), 2));
+
+  ASSERT_TRUE(
+      FPDFText_GetCharBox(text_page.get(), 2, &left, &right, &bottom, &top));
+  EXPECT_NEAR(7.512, right - left, 0.001);
+  EXPECT_NEAR(10.74, top - bottom, 0.001);
+  EXPECT_NEAR(750.49, top, 0.001);
+
+  ASSERT_TRUE(FPDFText_GetLooseCharBox(text_page.get(), 2, &rect));
+  EXPECT_NEAR(7.824f, rect.right - rect.left, 0.001f);
+  EXPECT_NEAR(12.0f, rect.top - rect.bottom, 0.001f);
+  EXPECT_NEAR(749.250f, rect.top, 0.001f);
+}
+
 TEST_F(FPDFTextEmbedderTest, SmallType3Glyph) {
   ASSERT_TRUE(OpenDocument("bug_1591.pdf"));
   ScopedEmbedderTestPage page = LoadScopedPage(0);