diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp
index d6f9fcb..075ae82 100644
--- a/core/fxge/cfx_face.cpp
+++ b/core/fxge/cfx_face.cpp
@@ -20,6 +20,7 @@
 #include "core/fxge/fx_fontencoding.h"
 #include "core/fxge/scoped_font_transform.h"
 #include "third_party/base/check.h"
+#include "third_party/base/check_op.h"
 #include "third_party/base/numerics/safe_conversions.h"
 #include "third_party/base/numerics/safe_math.h"
 
@@ -289,6 +290,20 @@
   return pdfium::base::checked_cast<int16_t>(GetRec()->descender);
 }
 
+int CFX_Face::GetAdjustedAscender() const {
+  int ascender = GetAscender();
+  CHECK_GE(ascender, kThousandthMinInt);
+  CHECK_LE(ascender, kThousandthMaxInt);
+  return EM_ADJUST(GetUnitsPerEm(), ascender);
+}
+
+int CFX_Face::GetAdjustedDescender() const {
+  int descender = GetDescender();
+  CHECK_GE(descender, kThousandthMinInt);
+  CHECK_LE(descender, kThousandthMaxInt);
+  return EM_ADJUST(GetUnitsPerEm(), descender);
+}
+
 #if BUILDFLAG(IS_ANDROID)
 int16_t CFX_Face::GetHeight() const {
   return pdfium::base::checked_cast<int16_t>(GetRec()->height);
diff --git a/core/fxge/cfx_face.h b/core/fxge/cfx_face.h
index 9534488..5b85a46 100644
--- a/core/fxge/cfx_face.h
+++ b/core/fxge/cfx_face.h
@@ -57,6 +57,8 @@
   uint16_t GetUnitsPerEm() const;
   int16_t GetAscender() const;
   int16_t GetDescender() const;
+  int GetAdjustedAscender() const;
+  int GetAdjustedDescender() const;
 #if BUILDFLAG(IS_ANDROID)
   int16_t GetHeight() const;
 #endif
diff --git a/core/fxge/cfx_font.cpp b/core/fxge/cfx_font.cpp
index e48a6bc..7bc1469 100644
--- a/core/fxge/cfx_font.cpp
+++ b/core/fxge/cfx_font.cpp
@@ -31,13 +31,8 @@
 #include "third_party/base/containers/span.h"
 #include "third_party/base/numerics/safe_conversions.h"
 
-#define EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em)
-
 namespace {
 
-constexpr int kThousandthMinInt = std::numeric_limits<int>::min() / 1000;
-constexpr int kThousandthMaxInt = std::numeric_limits<int>::max() / 1000;
-
 FX_RECT FXRectFromFTPos(FT_Pos left, FT_Pos top, FT_Pos right, FT_Pos bottom) {
   return FX_RECT(pdfium::base::checked_cast<int32_t>(left),
                  pdfium::base::checked_cast<int32_t>(top),
@@ -280,25 +275,11 @@
 }
 
 int CFX_Font::GetAscent() const {
-  if (!m_Face)
-    return 0;
-
-  int ascender = m_Face->GetAscender();
-  if (ascender < kThousandthMinInt || ascender > kThousandthMaxInt)
-    return 0;
-
-  return EM_ADJUST(m_Face->GetUnitsPerEm(), ascender);
+  return m_Face ? m_Face->GetAdjustedAscender() : 0;
 }
 
 int CFX_Font::GetDescent() const {
-  if (!m_Face)
-    return 0;
-
-  int descender = m_Face->GetDescender();
-  if (descender < kThousandthMinInt || descender > kThousandthMaxInt)
-    return 0;
-
-  return EM_ADJUST(m_Face->GetUnitsPerEm(), descender);
+  return m_Face ? m_Face->GetAdjustedDescender() : 0;
 }
 
 absl::optional<FX_RECT> CFX_Font::GetGlyphBBox(uint32_t glyph_index) {
