diff --git a/core/fpdfapi/font/cpdf_cmapparser.cpp b/core/fpdfapi/font/cpdf_cmapparser.cpp
index 6b5e56f..af23f50 100644
--- a/core/fpdfapi/font/cpdf_cmapparser.cpp
+++ b/core/fpdfapi/font/cpdf_cmapparser.cpp
@@ -109,7 +109,7 @@
 
 void CPDF_CMapParser::HandleCodeSpaceRange(ByteStringView word) {
   if (word != "endcodespacerange") {
-    if (word.GetLength() == 0 || word[0] != '<')
+    if (word.IsEmpty() || word[0] != '<')
       return;
 
     if (m_CodeSeq % 2) {
@@ -165,7 +165,7 @@
 Optional<CPDF_CMap::CodeRange> CPDF_CMapParser::GetCodeRange(
     ByteStringView first,
     ByteStringView second) {
-  if (first.GetLength() == 0 || first[0] != '<')
+  if (first.IsEmpty() || first[0] != '<')
     return pdfium::nullopt;
 
   size_t i;
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index f21b5e5..0a55c27 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -430,7 +430,7 @@
   FX_FILESIZE SavedObjPos = m_Pos;
   bool bIsNumber;
   ByteString word = GetNextWord(&bIsNumber);
-  if (word.GetLength() == 0)
+  if (word.IsEmpty())
     return nullptr;
 
   if (bIsNumber) {
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index 8c79208..7252f91 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -448,7 +448,7 @@
 
 WideString CPDF_TextPage::GetPageText(int start, int count) const {
   if (start < 0 || start >= CountChars() || count <= 0 || m_CharList.empty() ||
-      m_TextBuf.GetLength() == 0) {
+      m_TextBuf.IsEmpty()) {
     return WideString();
   }
 
diff --git a/core/fxge/dib/fx_dib_main.cpp b/core/fxge/dib/fx_dib_main.cpp
index 031fe65..31e5919 100644
--- a/core/fxge/dib/fx_dib_main.cpp
+++ b/core/fxge/dib/fx_dib_main.cpp
@@ -106,7 +106,7 @@
 
 FX_ARGB StringToFXARGB(WideStringView view) {
   static constexpr FX_ARGB kDefaultValue = 0xff000000;
-  if (view.GetLength() == 0)
+  if (view.IsEmpty())
     return kDefaultValue;
 
   int cc = 0;
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 0b3f472..9294f17 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -359,7 +359,7 @@
 
   CPDFSDK_InteractiveForm* pInteractiveForm = GetSDKInteractiveForm();
   ByteString sTextBuf = pInteractiveForm->ExportFormToFDFTextBuf();
-  if (sTextBuf.GetLength() == 0)
+  if (sTextBuf.IsEmpty())
     return CJS_Result::Failure(L"Bad FDF format.");
 
   std::vector<v8::Local<v8::Value>> newParams = ExpandKeywordParams(
diff --git a/fxjs/cjs_runtime.cpp b/fxjs/cjs_runtime.cpp
index 81148de..919d47a 100644
--- a/fxjs/cjs_runtime.cpp
+++ b/fxjs/cjs_runtime.cpp
@@ -216,7 +216,7 @@
   bool bAllowNaN = false;
   if (value->IsString()) {
     ByteString bstr = ToWideString(value).ToDefANSI();
-    if (bstr.GetLength() == 0)
+    if (bstr.IsEmpty())
       return value;
     if (bstr == "NaN")
       bAllowNaN = true;
diff --git a/fxjs/xfa/cfxjse_resolveprocessor.cpp b/fxjs/xfa/cfxjse_resolveprocessor.cpp
index 7aa265d..3dc80e7 100644
--- a/fxjs/xfa/cfxjse_resolveprocessor.cpp
+++ b/fxjs/xfa/cfxjse_resolveprocessor.cpp
@@ -220,7 +220,7 @@
   if (rndFind.m_Objects.empty())
     return false;
 
-  if (wsCondition.GetLength() == 0 &&
+  if (wsCondition.IsEmpty() &&
       pdfium::ContainsValue(rndFind.m_Objects, curNode)) {
     rnd.m_Objects.emplace_back(curNode);
   } else {
@@ -423,7 +423,7 @@
         } else {
           if (child->GetNameHash() == uNameHash) {
             rnd.m_Objects.emplace_back(curNode);
-            if (rnd.m_nLevel == 0 && wsCondition.GetLength() == 0) {
+            if (rnd.m_nLevel == 0 && wsCondition.IsEmpty()) {
               rnd.m_Objects.clear();
               rnd.m_Objects.emplace_back(curNode);
               return true;
diff --git a/testing/fuzzers/pdf_css_fuzzer.cc b/testing/fuzzers/pdf_css_fuzzer.cc
index f820972..5f1471d 100644
--- a/testing/fuzzers/pdf_css_fuzzer.cc
+++ b/testing/fuzzers/pdf_css_fuzzer.cc
@@ -13,7 +13,7 @@
       WideString::FromUTF8(ByteStringView(data, static_cast<size_t>(size)));
 
   // If we convert the input into an empty string bail out.
-  if (input.GetLength() == 0)
+  if (input.IsEmpty())
     return 0;
 
   CFX_CSSSyntaxParser parser(input.c_str(), input.GetLength());
diff --git a/xfa/fde/cfde_texteditengine.cpp b/xfa/fde/cfde_texteditengine.cpp
index 3b9c1ad..281f978 100644
--- a/xfa/fde/cfde_texteditengine.cpp
+++ b/xfa/fde/cfde_texteditengine.cpp
@@ -252,7 +252,7 @@
                                  const WideString& request_text,
                                  RecordOperation add_operation) {
   WideString text = request_text;
-  if (text.GetLength() == 0)
+  if (text.IsEmpty())
     return;
 
   idx = std::min(idx, text_length_);
diff --git a/xfa/fgas/font/cfgas_gefont.cpp b/xfa/fgas/font/cfgas_gefont.cpp
index 69aa702..5a7c625 100644
--- a/xfa/fgas/font/cfgas_gefont.cpp
+++ b/xfa/fgas/font/cfgas_gefont.cpp
@@ -130,12 +130,11 @@
 }
 
 WideString CFGAS_GEFont::GetFamilyName() const {
-  if (!m_pFont->GetSubstFont() ||
-      m_pFont->GetSubstFont()->m_Family.GetLength() == 0) {
-    return WideString::FromDefANSI(m_pFont->GetFamilyName().AsStringView());
-  }
-  return WideString::FromDefANSI(
-      m_pFont->GetSubstFont()->m_Family.AsStringView());
+  CFX_SubstFont* subst_font = m_pFont->GetSubstFont();
+  ByteString family_name = subst_font && !subst_font->m_Family.IsEmpty()
+                               ? subst_font->m_Family
+                               : m_pFont->GetFamilyName();
+  return WideString::FromDefANSI(family_name.AsStringView());
 }
 
 uint32_t CFGAS_GEFont::GetFontStyles() const {
