diff --git a/core/fpdfapi/parser/cpdf_security_handler.cpp b/core/fpdfapi/parser/cpdf_security_handler.cpp
index cb94630..38e029c 100644
--- a/core/fpdfapi/parser/cpdf_security_handler.cpp
+++ b/core/fpdfapi/parser/cpdf_security_handler.cpp
@@ -99,7 +99,10 @@
 bool CPDF_SecurityHandler::OnInit(const CPDF_Dictionary* pEncryptDict,
                                   const CPDF_Array* pIdArray,
                                   const ByteString& password) {
-  m_FileId = pIdArray ? pIdArray->GetStringAt(0) : "";
+  if (pIdArray)
+    m_FileId = pIdArray->GetStringAt(0);
+  else
+    m_FileId.clear();
   if (!LoadDict(pEncryptDict))
     return false;
   if (m_Cipher == FXCIPHER_NONE)
diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp
index 597e5fb..e9829b0 100644
--- a/core/fpdfdoc/cpdf_annot.cpp
+++ b/core/fpdfdoc/cpdf_annot.cpp
@@ -376,7 +376,7 @@
     return "RichMedia";
   if (nSubtype == CPDF_Annot::Subtype::XFAWIDGET)
     return "XFAWidget";
-  return "";
+  return ByteString();
 }
 
 // static
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index c44e28a..d5a6530 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -315,7 +315,7 @@
 
 ByteString CPDF_FormField::GetDefaultStyle() const {
   const CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict.Get(), "DS");
-  return pObj ? pObj->GetString() : "";
+  return pObj ? pObj->GetString() : ByteString();
 }
 
 void CPDF_FormField::SetOpt(std::unique_ptr<CPDF_Object> pOpt) {
diff --git a/core/fpdfdoc/cpdf_interactiveform.cpp b/core/fpdfdoc/cpdf_interactiveform.cpp
index 1c0a8e9..a148ac4 100644
--- a/core/fpdfdoc/cpdf_interactiveform.cpp
+++ b/core/fpdfdoc/cpdf_interactiveform.cpp
@@ -930,7 +930,7 @@
       if (pClone)
         pDict->SetFor("T", std::move(pClone));
       else
-        pDict->SetNewFor<CPDF_Name>("T", "");
+        pDict->SetNewFor<CPDF_Name>("T", ByteString());
     }
     if (!m_pFieldTree->SetField(csWName, std::move(newField)))
       return;
diff --git a/core/fpdfdoc/cpdf_pagelabel.cpp b/core/fpdfdoc/cpdf_pagelabel.cpp
index 192e142..8985def 100644
--- a/core/fpdfdoc/cpdf_pagelabel.cpp
+++ b/core/fpdfdoc/cpdf_pagelabel.cpp
@@ -110,7 +110,7 @@
       if (pLabel->KeyExist("P"))
         label += pLabel->GetUnicodeTextFor("P");
 
-      ByteString bsNumberingStyle = pLabel->GetStringFor("S", "");
+      ByteString bsNumberingStyle = pLabel->GetStringFor("S", ByteString());
       int nLabelNum = nPage - n + pLabel->GetIntegerFor("St", 1);
       WideString wsNumPortion = GetLabelNumPortion(nLabelNum, bsNumberingStyle);
       label += wsNumPortion;
diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp
index 2dc491b..107bed1 100644
--- a/core/fpdfdoc/cpvt_generateap.cpp
+++ b/core/fpdfdoc/cpvt_generateap.cpp
@@ -51,11 +51,11 @@
     return ByteString::Format("%c", SubWord);
 
   if (!pFontMap)
-    return "";
+    return ByteString();
 
   CPDF_Font* pPDFFont = pFontMap->GetPDFFont(nFontIndex);
   if (!pPDFFont)
-    return "";
+    return ByteString();
 
   if (pPDFFont->GetBaseFont().Compare("Symbol") == 0 ||
       pPDFFont->GetBaseFont().Compare("ZapfDingbats") == 0) {
@@ -72,7 +72,7 @@
 ByteString GetWordRenderString(const ByteString& strWords) {
   if (strWords.GetLength() > 0)
     return PDF_EncodeString(strWords, false) + " Tj\n";
-  return "";
+  return ByteString();
 }
 
 ByteString GetFontSetString(IPVT_FontMap* pFontMap,
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index 4520a21..23e2522 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -202,7 +202,7 @@
   WideString JS_docGetFilePath();
   void JS_docSubmitForm(void* formData, int length, const WideString& URL);
 
-  ByteString GetAppName() const { return ""; }
+  ByteString GetAppName() const { return ByteString(); }
   CFX_SystemHandler* GetSysHandler() const { return m_pSysHandler.get(); }
   FPDF_FORMFILLINFO* GetFormFillInfo() const { return m_pInfo; }
 
diff --git a/fpdfsdk/fpdf_ppo.cpp b/fpdfsdk/fpdf_ppo.cpp
index 5f1de23..d8c7747 100644
--- a/fpdfsdk/fpdf_ppo.cpp
+++ b/fpdfsdk/fpdf_ppo.cpp
@@ -322,7 +322,7 @@
 
   pDocInfoDict->SetNewFor<CPDF_String>("Producer", "PDFium", false);
 
-  ByteString cbRootType = pNewRoot->GetStringFor("Type", "");
+  ByteString cbRootType = pNewRoot->GetStringFor("Type", ByteString());
   if (cbRootType.IsEmpty())
     pNewRoot->SetNewFor<CPDF_Name>("Type", "Catalog");
 
@@ -334,7 +334,7 @@
     pNewRoot->SetFor("Pages", pNewPages->MakeReference(dest()));
   }
 
-  ByteString cbPageType = pNewPages->GetStringFor("Type", "");
+  ByteString cbPageType = pNewPages->GetStringFor("Type", ByteString());
   if (cbPageType.IsEmpty())
     pNewPages->SetNewFor<CPDF_Name>("Type", "Pages");
 
diff --git a/fpdfsdk/pwl/cpwl_appstream.cpp b/fpdfsdk/pwl/cpwl_appstream.cpp
index a81a4eb..137022a 100644
--- a/fpdfsdk/pwl/cpwl_appstream.cpp
+++ b/fpdfsdk/pwl/cpwl_appstream.cpp
@@ -1248,7 +1248,7 @@
                              &font_map, pNormalIcon, iconFit, csNormalCaption,
                              crText, fFontSize, nLayout);
 
-  Write("N", csAP, "");
+  Write("N", csAP, ByteString());
   if (pNormalIcon)
     AddImage("N", pNormalIcon);
 
@@ -1269,7 +1269,7 @@
                                &font_map, pRolloverIcon, iconFit,
                                csRolloverCaption, crText, fFontSize, nLayout);
 
-    Write("R", csAP, "");
+    Write("R", csAP, ByteString());
     if (pRolloverIcon)
       AddImage("R", pRolloverIcon);
 
@@ -1304,7 +1304,7 @@
                                &font_map, pDownIcon, iconFit, csDownCaption,
                                crText, fFontSize, nLayout);
 
-    Write("D", csAP, "");
+    Write("D", csAP, ByteString());
     if (pDownIcon)
       AddImage("D", pDownIcon);
   } else {
@@ -1649,7 +1649,7 @@
   sBody << GetDropButtonAppStream(rcButton);
   Write("N",
         GetBackgroundAppStream() + GetBorderAppStream() + ByteString(sBody),
-        "");
+        ByteString());
 }
 
 void CPWL_AppStream::SetAsListBox() {
@@ -1734,7 +1734,7 @@
   }
   Write("N",
         GetBackgroundAppStream() + GetBorderAppStream() + ByteString(sBody),
-        "");
+        ByteString());
 }
 
 void CPWL_AppStream::SetAsTextField(Optional<WideString> sValue) {
@@ -1884,7 +1884,7 @@
   Write("N",
         GetBackgroundAppStream() + GetBorderAppStream() + ByteString(sLines) +
             ByteString(sBody),
-        "");
+        ByteString());
 }
 
 void CPWL_AppStream::AddImage(const ByteString& sAPType, CPDF_Stream* pImage) {
diff --git a/fxjs/cjs_global.cpp b/fxjs/cjs_global.cpp
index 57c5849..8f67887 100644
--- a/fxjs/cjs_global.cpp
+++ b/fxjs/cjs_global.cpp
@@ -273,12 +273,12 @@
   ByteString sPropName = WideString(propname).ToDefANSI();
   if (vp->IsNumber()) {
     return SetGlobalVariables(sPropName, CFX_Value::DataType::NUMBER,
-                              pRuntime->ToDouble(vp), false, "",
+                              pRuntime->ToDouble(vp), false, ByteString(),
                               v8::Local<v8::Object>(), false);
   }
   if (vp->IsBoolean()) {
     return SetGlobalVariables(sPropName, CFX_Value::DataType::BOOLEAN, 0,
-                              pRuntime->ToBoolean(vp), "",
+                              pRuntime->ToBoolean(vp), ByteString(),
                               v8::Local<v8::Object>(), false);
   }
   if (vp->IsString()) {
@@ -288,11 +288,11 @@
   }
   if (vp->IsObject()) {
     return SetGlobalVariables(sPropName, CFX_Value::DataType::OBJECT, 0, false,
-                              "", pRuntime->ToObject(vp), false);
+                              ByteString(), pRuntime->ToObject(vp), false);
   }
   if (vp->IsNull()) {
     return SetGlobalVariables(sPropName, CFX_Value::DataType::NULLOBJ, 0, false,
-                              "", v8::Local<v8::Object>(), false);
+                              ByteString(), v8::Local<v8::Object>(), false);
   }
   if (vp->IsUndefined()) {
     DelProperty(pRuntime, propname);
@@ -325,7 +325,7 @@
     switch (pData->data.nType) {
       case CFX_Value::DataType::NUMBER:
         SetGlobalVariables(pData->data.sKey, CFX_Value::DataType::NUMBER,
-                           pData->data.dData, false, "",
+                           pData->data.dData, false, ByteString(),
                            v8::Local<v8::Object>(), pData->bPersistent == 1);
         pRuntime->PutObjectProperty(
             ToV8Object(), WideString::FromUTF8(pData->data.sKey.AsStringView()),
@@ -333,8 +333,8 @@
         break;
       case CFX_Value::DataType::BOOLEAN:
         SetGlobalVariables(pData->data.sKey, CFX_Value::DataType::BOOLEAN, 0,
-                           pData->data.bData == 1, "", v8::Local<v8::Object>(),
-                           pData->bPersistent == 1);
+                           pData->data.bData == 1, ByteString(),
+                           v8::Local<v8::Object>(), pData->bPersistent == 1);
         pRuntime->PutObjectProperty(
             ToV8Object(), WideString::FromUTF8(pData->data.sKey.AsStringView()),
             pRuntime->NewBoolean(pData->data.bData == 1));
@@ -354,7 +354,8 @@
         if (!pObj.IsEmpty()) {
           PutObjectProperty(pObj, &pData->data);
           SetGlobalVariables(pData->data.sKey, CFX_Value::DataType::OBJECT, 0,
-                             false, "", pObj, pData->bPersistent == 1);
+                             false, ByteString(), pObj,
+                             pData->bPersistent == 1);
           pRuntime->PutObjectProperty(
               ToV8Object(),
               WideString::FromUTF8(pData->data.sKey.AsStringView()), pObj);
@@ -362,7 +363,7 @@
       } break;
       case CFX_Value::DataType::NULLOBJ:
         SetGlobalVariables(pData->data.sKey, CFX_Value::DataType::NULLOBJ, 0,
-                           false, "", v8::Local<v8::Object>(),
+                           false, ByteString(), v8::Local<v8::Object>(),
                            pData->bPersistent == 1);
         pRuntime->PutObjectProperty(
             ToV8Object(), WideString::FromUTF8(pData->data.sKey.AsStringView()),
diff --git a/xfa/fgas/font/cfx_fontsourceenum_file.cpp b/xfa/fgas/font/cfx_fontsourceenum_file.cpp
index 395d9d2..6cdf3dc 100644
--- a/xfa/fgas/font/cfx_fontsourceenum_file.cpp
+++ b/xfa/fgas/font/cfx_fontsourceenum_file.cpp
@@ -35,7 +35,7 @@
       !m_FolderQueue.empty() ? m_FolderQueue.back().pFileHandle : nullptr;
   if (!pCurHandle) {
     if (m_FolderPaths.empty())
-      return "";
+      return ByteString();
     pCurHandle = FX_OpenFolder(m_FolderPaths.back().c_str());
     HandleParentPath hpp;
     hpp.pFileHandle = pCurHandle;
@@ -52,7 +52,7 @@
       if (m_FolderQueue.empty()) {
         if (!m_FolderPaths.empty())
           m_FolderPaths.pop_back();
-        return !m_FolderPaths.empty() ? GetNextFile() : "";
+        return !m_FolderPaths.empty() ? GetNextFile() : ByteString();
       }
       pCurHandle = m_FolderQueue.back().pFileHandle;
       continue;
