Add fontations calls and checks to CFX_Face::GetGlyphBBox() BUG: 42271123 Change-Id: I1beafcd5430ba8d84146cd57404a6c31c22908b8 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/148332 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index cc8df64..ca6c1c8 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp
@@ -1186,10 +1186,30 @@ pdfium::ClampedNumeric<FT_Pos> left = glyph->metrics.horiBearingX; pdfium::ClampedNumeric<FT_Pos> top = glyph->metrics.horiBearingY; const uint16_t upem = GetUnitsPerEm(); - return FX_RECT(NormalizeFontMetric(left, upem), - NormalizeFontMetric(top, upem), - NormalizeFontMetric(left + glyph->metrics.width, upem), - NormalizeFontMetric(top - glyph->metrics.height, upem)); + FX_RECT ft_result(NormalizeFontMetric(left, upem), + NormalizeFontMetric(top, upem), + NormalizeFontMetric(left + glyph->metrics.width, upem), + NormalizeFontMetric(top - glyph->metrics.height, upem)); + +#if defined(PDF_ENABLE_SKIA_TYPEFACE_CHECKS) + if (skia_typeface_) { + SkFont font(skia_typeface_, upem); + font.setHinting(SkFontHinting::kNone); + uint16_t skia_glyph_index = static_cast<uint16_t>(glyph->glyph_index); + SkRect bounds = font.getBounds(skia_glyph_index, nullptr); + + CHECK_EQ(ft_result.left, + NormalizeFontMetric(static_cast<int32_t>(bounds.fLeft), upem)); + CHECK_EQ(ft_result.top, + NormalizeFontMetric(static_cast<int32_t>(-bounds.fTop), upem)); + CHECK_EQ(ft_result.right, + NormalizeFontMetric(static_cast<int32_t>(bounds.fRight), upem)); + CHECK_EQ(ft_result.bottom, + NormalizeFontMetric(static_cast<int32_t>(-bounds.fBottom), upem)); + } +#endif + + return ft_result; } std::vector<CharCodeAndIndex> CFX_Face::GetCharCodesAndIndices(