Skip loose charbox calculation if the charbox is empty If the charbox is empty, then give the loose charbox the same value instead of trying to do calculations like normal. Bug: 399689604 Change-Id: Id9bb08dc2330259d0124a65b3144c125d1ca7504 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/129210 Reviewed-by: Tom Sepez <tsepez@chromium.org> Reviewed-by: Thomas Sepez <tsepez@google.com> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp index 657e305..57286a8 100644 --- a/core/fpdftext/cpdf_textpage.cpp +++ b/core/fpdftext/cpdf_textpage.cpp
@@ -267,6 +267,10 @@ } CFX_FloatRect GetLooseBounds(const CPDF_TextPage::CharInfo& charinfo) { + if (charinfo.char_box().IsEmpty()) { + return charinfo.char_box(); + } + const CPDF_TextObject* text_object = charinfo.text_object(); float font_size = GetFontSize(text_object); if (text_object && !FXSYS_IsFloatZero(font_size)) {
diff --git a/fpdfsdk/fpdf_text_embeddertest.cpp b/fpdfsdk/fpdf_text_embeddertest.cpp index d2d7a57..0116614 100644 --- a/fpdfsdk/fpdf_text_embeddertest.cpp +++ b/fpdfsdk/fpdf_text_embeddertest.cpp
@@ -2015,13 +2015,11 @@ EXPECT_DOUBLE_EQ(0.0, top - bottom); EXPECT_NEAR(100.0, top, 0.001); - // TODO(crbug.com/399689604): Should have an empty rect like - // FPDFText_GetCharBox(). FS_RECTF rect; ASSERT_TRUE(FPDFText_GetLooseCharBox(text_page.get(), 5, &rect)); - EXPECT_NEAR(2.99f, rect.right - rect.left, 0.001f); - EXPECT_NEAR(15.345f, rect.top - rect.bottom, 0.001f); - EXPECT_NEAR(11.733f, rect.top, 0.001f); + EXPECT_NEAR(0.0f, rect.right - rect.left, 0.001f); + EXPECT_NEAR(0.0f, rect.top - rect.bottom, 0.001f); + EXPECT_NEAR(100.0f, rect.top, 0.001f); } TEST_F(FPDFTextEmbedderTest, SmallType3Glyph) {