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) {