diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp
index b74b08a..e259f01 100644
--- a/core/fpdfapi/edit/cpdf_creator.cpp
+++ b/core/fpdfapi/edit/cpdf_creator.cpp
@@ -47,18 +47,15 @@
  private:
   bool Flush();
 
-  FX_FILESIZE offset_;
-  size_t current_length_;
+  FX_FILESIZE offset_ = 0;
+  size_t current_length_ = 0;
   std::vector<uint8_t, FxAllocAllocator<uint8_t>> buffer_;
   RetainPtr<IFX_RetainableWriteStream> backing_file_;
 };
 
 CFX_FileBufferArchive::CFX_FileBufferArchive(
     const RetainPtr<IFX_RetainableWriteStream>& file)
-    : offset_(0),
-      current_length_(0),
-      buffer_(kArchiveBufferSize),
-      backing_file_(file) {
+    : buffer_(kArchiveBufferSize), backing_file_(file) {
   DCHECK(file);
 }
 
diff --git a/core/fpdfapi/page/cpdf_textobject.cpp b/core/fpdfapi/page/cpdf_textobject.cpp
index 8c3825d..185606b 100644
--- a/core/fpdfapi/page/cpdf_textobject.cpp
+++ b/core/fpdfapi/page/cpdf_textobject.cpp
@@ -15,7 +15,7 @@
 
 #define ISLATINWORD(u) (u != 0x20 && u <= 0x28FF)
 
-CPDF_TextObjectItem::CPDF_TextObjectItem() : m_CharCode(0) {}
+CPDF_TextObjectItem::CPDF_TextObjectItem() = default;
 
 CPDF_TextObjectItem::~CPDF_TextObjectItem() = default;
 
diff --git a/core/fpdfapi/page/cpdf_textobject.h b/core/fpdfapi/page/cpdf_textobject.h
index cc8f64a..4735eea 100644
--- a/core/fpdfapi/page/cpdf_textobject.h
+++ b/core/fpdfapi/page/cpdf_textobject.h
@@ -20,7 +20,7 @@
   CPDF_TextObjectItem();
   ~CPDF_TextObjectItem();
 
-  uint32_t m_CharCode;
+  uint32_t m_CharCode = 0;
   CFX_PointF m_Origin;
 };
 
diff --git a/core/fpdfapi/parser/cpdf_flateencoder.cpp b/core/fpdfapi/parser/cpdf_flateencoder.cpp
index 7d47c1a..d3440f2 100644
--- a/core/fpdfapi/parser/cpdf_flateencoder.cpp
+++ b/core/fpdfapi/parser/cpdf_flateencoder.cpp
@@ -20,7 +20,7 @@
 
 CPDF_FlateEncoder::CPDF_FlateEncoder(const CPDF_Stream* pStream,
                                      bool bFlateEncode)
-    : m_pAcc(pdfium::MakeRetain<CPDF_StreamAcc>(pStream)), m_dwSize(0) {
+    : m_pAcc(pdfium::MakeRetain<CPDF_StreamAcc>(pStream)) {
   m_pAcc->LoadAllDataRaw();
 
   bool bHasFilter = pStream->HasFilter();
diff --git a/core/fpdfapi/parser/cpdf_flateencoder.h b/core/fpdfapi/parser/cpdf_flateencoder.h
index 328fce7..4a86423 100644
--- a/core/fpdfapi/parser/cpdf_flateencoder.h
+++ b/core/fpdfapi/parser/cpdf_flateencoder.h
@@ -34,7 +34,7 @@
  private:
   RetainPtr<CPDF_StreamAcc> m_pAcc;
 
-  uint32_t m_dwSize;
+  uint32_t m_dwSize = 0;
   MaybeOwned<uint8_t, FxFreeDeleter> m_pData;
 
   // Only one of these two pointers is valid at any time.
diff --git a/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp b/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp
index f30753d..568c0bb 100644
--- a/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp
+++ b/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp
@@ -22,7 +22,7 @@
 }  // namespace
 
 CPDF_IndirectObjectHolder::CPDF_IndirectObjectHolder()
-    : m_LastObjNum(0), m_pByteStringPool(std::make_unique<ByteStringPool>()) {}
+    : m_pByteStringPool(std::make_unique<ByteStringPool>()) {}
 
 CPDF_IndirectObjectHolder::~CPDF_IndirectObjectHolder() {
   m_pByteStringPool.DeleteObject();  // Make weak.
diff --git a/core/fpdfapi/parser/cpdf_indirect_object_holder.h b/core/fpdfapi/parser/cpdf_indirect_object_holder.h
index 51aecec..1b1f861 100644
--- a/core/fpdfapi/parser/cpdf_indirect_object_holder.h
+++ b/core/fpdfapi/parser/cpdf_indirect_object_holder.h
@@ -76,7 +76,7 @@
   virtual RetainPtr<CPDF_Object> ParseIndirectObject(uint32_t objnum);
 
  private:
-  uint32_t m_LastObjNum;
+  uint32_t m_LastObjNum = 0;
   std::map<uint32_t, RetainPtr<CPDF_Object>> m_IndirectObjs;
   WeakPtr<ByteStringPool> m_pByteStringPool;
 };
diff --git a/core/fxcrt/cfx_bitstream.cpp b/core/fxcrt/cfx_bitstream.cpp
index db0c852..7b1e502 100644
--- a/core/fxcrt/cfx_bitstream.cpp
+++ b/core/fxcrt/cfx_bitstream.cpp
@@ -13,7 +13,7 @@
 #include "third_party/base/check.h"
 
 CFX_BitStream::CFX_BitStream(pdfium::span<const uint8_t> pData)
-    : m_BitPos(0), m_BitSize(pData.size() * 8), m_pData(pData.data()) {
+    : m_BitSize(pData.size() * 8), m_pData(pData.data()) {
   DCHECK(pData.size() <= std::numeric_limits<uint32_t>::max() / 8);
 }
 
diff --git a/core/fxcrt/cfx_bitstream.h b/core/fxcrt/cfx_bitstream.h
index baa2a9f..731a637 100644
--- a/core/fxcrt/cfx_bitstream.h
+++ b/core/fxcrt/cfx_bitstream.h
@@ -31,9 +31,9 @@
   }
 
  private:
-  uint32_t m_BitPos;
-  uint32_t m_BitSize;
-  UnownedPtr<const uint8_t> m_pData;
+  uint32_t m_BitPos = 0;
+  const uint32_t m_BitSize;
+  UnownedPtr<const uint8_t> const m_pData;
 };
 
 #endif  // CORE_FXCRT_CFX_BITSTREAM_H_
diff --git a/core/fxcrt/cfx_datetime.h b/core/fxcrt/cfx_datetime.h
index b49c153..9fd6763 100644
--- a/core/fxcrt/cfx_datetime.h
+++ b/core/fxcrt/cfx_datetime.h
@@ -16,14 +16,7 @@
  public:
   static CFX_DateTime Now();
 
-  CFX_DateTime()
-      : year_(0),
-        month_(0),
-        day_(0),
-        hour_(0),
-        minute_(0),
-        second_(0),
-        millisecond_(0) {}
+  CFX_DateTime() = default;
   CFX_DateTime(int32_t year,
                uint8_t month,
                uint8_t day,
@@ -82,13 +75,13 @@
   bool operator==(const CFX_DateTime& other) const;
 
  private:
-  int32_t year_;
-  uint8_t month_;
-  uint8_t day_;
-  uint8_t hour_;
-  uint8_t minute_;
-  uint8_t second_;
-  uint16_t millisecond_;
+  int32_t year_ = 0;
+  uint8_t month_ = 0;
+  uint8_t day_ = 0;
+  uint8_t hour_ = 0;
+  uint8_t minute_ = 0;
+  uint8_t second_ = 0;
+  uint16_t millisecond_ = 0;
 };
 
 #endif  // CORE_FXCRT_CFX_DATETIME_H_
diff --git a/core/fxcrt/cfx_seekablestreamproxy.cpp b/core/fxcrt/cfx_seekablestreamproxy.cpp
index 76d5582..be1d1ec 100644
--- a/core/fxcrt/cfx_seekablestreamproxy.cpp
+++ b/core/fxcrt/cfx_seekablestreamproxy.cpp
@@ -17,7 +17,6 @@
 #include <vector>
 
 #include "build/build_config.h"
-#include "core/fxcrt/fx_codepage.h"
 #include "core/fxcrt/fx_extension.h"
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/fx_safe_types.h"
@@ -105,10 +104,7 @@
 
 CFX_SeekableStreamProxy::CFX_SeekableStreamProxy(
     const RetainPtr<IFX_SeekableReadStream>& stream)
-    : m_wCodePage(FX_CODEPAGE_DefANSI),
-      m_wBOMLength(0),
-      m_iPosition(0),
-      m_pStream(stream) {
+    : m_pStream(stream) {
   DCHECK(m_pStream);
 
   Seek(From::Begin, 0);
diff --git a/core/fxcrt/cfx_seekablestreamproxy.h b/core/fxcrt/cfx_seekablestreamproxy.h
index b169606..bfff049 100644
--- a/core/fxcrt/cfx_seekablestreamproxy.h
+++ b/core/fxcrt/cfx_seekablestreamproxy.h
@@ -7,6 +7,7 @@
 #ifndef CORE_FXCRT_CFX_SEEKABLESTREAMPROXY_H_
 #define CORE_FXCRT_CFX_SEEKABLESTREAMPROXY_H_
 
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxcrt/fx_stream.h"
 #include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -38,10 +39,10 @@
   void Seek(From eSeek, FX_FILESIZE iOffset);
   size_t ReadData(uint8_t* pBuffer, size_t iBufferSize);
 
-  uint16_t m_wCodePage;
-  size_t m_wBOMLength;
-  FX_FILESIZE m_iPosition;
-  RetainPtr<IFX_SeekableReadStream> m_pStream;
+  uint16_t m_wCodePage = FX_CODEPAGE_DefANSI;
+  size_t m_wBOMLength = 0;
+  FX_FILESIZE m_iPosition = 0;
+  RetainPtr<IFX_SeekableReadStream> const m_pStream;
 };
 
 #endif  // CORE_FXCRT_CFX_SEEKABLESTREAMPROXY_H_
diff --git a/core/fxcrt/css/cfx_cssrulecollection.cpp b/core/fxcrt/css/cfx_cssrulecollection.cpp
index b85d4e9..cbb799e 100644
--- a/core/fxcrt/css/cfx_cssrulecollection.cpp
+++ b/core/fxcrt/css/cfx_cssrulecollection.cpp
@@ -15,7 +15,7 @@
 #include "core/fxcrt/css/cfx_cssstylesheet.h"
 #include "core/fxcrt/css/cfx_csssyntaxparser.h"
 
-CFX_CSSRuleCollection::CFX_CSSRuleCollection() : m_iSelectors(0) {}
+CFX_CSSRuleCollection::CFX_CSSRuleCollection() = default;
 
 CFX_CSSRuleCollection::~CFX_CSSRuleCollection() {
   Clear();
diff --git a/core/fxcrt/css/cfx_cssrulecollection.h b/core/fxcrt/css/cfx_cssrulecollection.h
index 72ae58c..7b6d652 100644
--- a/core/fxcrt/css/cfx_cssrulecollection.h
+++ b/core/fxcrt/css/cfx_cssrulecollection.h
@@ -43,7 +43,7 @@
                     CFX_CSSStyleRule* pRule);
 
   std::map<uint32_t, std::vector<std::unique_ptr<Data>>> m_TagRules;
-  int32_t m_iSelectors;
+  int32_t m_iSelectors = 0;
 };
 
 #endif  // CORE_FXCRT_CSS_CFX_CSSRULECOLLECTION_H_
diff --git a/core/fxcrt/string_data_template.cpp b/core/fxcrt/string_data_template.cpp
index 7b0edfb..ad87af6 100644
--- a/core/fxcrt/string_data_template.cpp
+++ b/core/fxcrt/string_data_template.cpp
@@ -90,7 +90,7 @@
 template <typename CharType>
 StringDataTemplate<CharType>::StringDataTemplate(size_t dataLen,
                                                  size_t allocLen)
-    : m_nRefs(0), m_nDataLength(dataLen), m_nAllocLength(allocLen) {
+    : m_nDataLength(dataLen), m_nAllocLength(allocLen) {
   DCHECK(dataLen >= 0);
   DCHECK(dataLen <= allocLen);
   m_String[dataLen] = 0;
diff --git a/core/fxcrt/string_data_template.h b/core/fxcrt/string_data_template.h
index da471af..8370186 100644
--- a/core/fxcrt/string_data_template.h
+++ b/core/fxcrt/string_data_template.h
@@ -33,13 +33,13 @@
   // Since the count increments with each new pointer, the largest value is
   // the number of pointers that can fit into the address space. The size of
   // the address space itself is a good upper bound on it.
-  intptr_t m_nRefs;
+  intptr_t m_nRefs = 0;
 
   // These lengths are in terms of number of characters, not bytes, and do not
   // include the terminating NUL character, but the underlying buffer is sized
   // to be capable of holding it.
   size_t m_nDataLength;
-  size_t m_nAllocLength;
+  const size_t m_nAllocLength;
 
   // Not really 1, variable size.
   CharType m_String[1];
diff --git a/core/fxcrt/weak_ptr_unittest.cpp b/core/fxcrt/weak_ptr_unittest.cpp
index f4026fb..e2a2337 100644
--- a/core/fxcrt/weak_ptr_unittest.cpp
+++ b/core/fxcrt/weak_ptr_unittest.cpp
@@ -19,7 +19,7 @@
 
 class PseudoDeletable {
  public:
-  PseudoDeletable() : delete_count_(0) {}
+  PseudoDeletable() = default;
   void Release() {
     ++delete_count_;
     next_.Reset();
@@ -28,7 +28,7 @@
   int delete_count() const { return delete_count_; }
 
  private:
-  int delete_count_;
+  int delete_count_ = 0;
   WeakTestPtr next_;
 };
 
diff --git a/core/fxge/cfx_folderfontinfo.cpp b/core/fxge/cfx_folderfontinfo.cpp
index 787bbee..6109370 100644
--- a/core/fxge/cfx_folderfontinfo.cpp
+++ b/core/fxge/cfx_folderfontinfo.cpp
@@ -413,6 +413,4 @@
       m_FaceName(faceName),
       m_FontTables(fontTables),
       m_FontOffset(fontOffset),
-      m_FileSize(fileSize),
-      m_Styles(0),
-      m_Charsets(0) {}
+      m_FileSize(fileSize) {}
diff --git a/core/fxge/cfx_folderfontinfo.h b/core/fxge/cfx_folderfontinfo.h
index e05dae2..05e8fb7 100644
--- a/core/fxge/cfx_folderfontinfo.h
+++ b/core/fxge/cfx_folderfontinfo.h
@@ -60,8 +60,8 @@
     const ByteString m_FontTables;
     const uint32_t m_FontOffset;
     const uint32_t m_FileSize;
-    uint32_t m_Styles;
-    uint32_t m_Charsets;
+    uint32_t m_Styles = 0;
+    uint32_t m_Charsets = 0;
   };
 
   void ScanPath(const ByteString& path);
diff --git a/core/fxge/dib/cfx_dibbase.cpp b/core/fxge/dib/cfx_dibbase.cpp
index 30248ff..493e449 100644
--- a/core/fxge/dib/cfx_dibbase.cpp
+++ b/core/fxge/dib/cfx_dibbase.cpp
@@ -65,11 +65,11 @@
   std::vector<uint32_t> m_Palette;
   // (Amount, Color) pairs
   std::vector<std::pair<uint32_t, uint32_t>> m_Luts;
-  int m_lut;
+  int m_lut = 0;
 };
 
 CFX_Palette::CFX_Palette(const RetainPtr<CFX_DIBBase>& pBitmap)
-    : m_Palette(256), m_Luts(4096), m_lut(0) {
+    : m_Palette(256), m_Luts(4096) {
   int bpp = pBitmap->GetBPP() / 8;
   int width = pBitmap->GetWidth();
   int height = pBitmap->GetHeight();
diff --git a/core/fxge/win32/cgdi_plus_ext.cpp b/core/fxge/win32/cgdi_plus_ext.cpp
index 2d43e7b..1b508c2 100644
--- a/core/fxge/win32/cgdi_plus_ext.cpp
+++ b/core/fxge/win32/cgdi_plus_ext.cpp
@@ -468,7 +468,7 @@
 
 class GpStream final : public IStream {
  public:
-  GpStream() : m_RefCount(1), m_ReadPos(0) {}
+  GpStream() = default;
   ~GpStream() = default;
 
   // IUnknown
@@ -597,8 +597,8 @@
   }
 
  private:
-  LONG m_RefCount;
-  std::streamoff m_ReadPos;
+  LONG m_RefCount = 1;
+  std::streamoff m_ReadPos = 0;
   std::ostringstream m_InterStream;
 };
 
diff --git a/testing/image_diff/image_diff.cpp b/testing/image_diff/image_diff.cpp
index 4afbc77..23109af 100644
--- a/testing/image_diff/image_diff.cpp
+++ b/testing/image_diff/image_diff.cpp
@@ -37,7 +37,7 @@
 
 class Image {
  public:
-  Image() : w_(0), h_(0) {}
+  Image() = default;
   Image(const Image& image) : w_(image.w_), h_(image.h_), data_(image.data_) {}
 
   bool has_image() const { return w_ > 0 && h_ > 0; }
@@ -108,8 +108,8 @@
   size_t pixel_address(int x, int y) const { return (y * w_ + x) * 4; }
 
   // Pixel dimensions of the image.
-  int w_;
-  int h_;
+  int w_ = 0;
+  int h_ = 0;
 
   std::vector<uint8_t> data_;
 };
diff --git a/xfa/fde/cfde_texteditengine.cpp b/xfa/fde/cfde_texteditengine.cpp
index bba7988..29365c7 100644
--- a/xfa/fde/cfde_texteditengine.cpp
+++ b/xfa/fde/cfde_texteditengine.cpp
@@ -7,7 +7,6 @@
 #include "xfa/fde/cfde_texteditengine.h"
 
 #include <algorithm>
-#include <limits>
 #include <utility>
 
 #include "core/fxcrt/fx_extension.h"
@@ -20,10 +19,6 @@
 
 namespace {
 
-constexpr size_t kMaxEditOperations = 128;
-constexpr size_t kGapSize = 128;
-constexpr size_t kPageWidthMax = 0xffff;
-
 class InsertOperation final : public CFDE_TextEditEngine::Operation {
  public:
   InsertOperation(CFDE_TextEditEngine* engine,
@@ -123,32 +118,7 @@
 
 }  // namespace
 
-CFDE_TextEditEngine::CFDE_TextEditEngine()
-    : font_color_(0xff000000),
-      font_size_(10.0f),
-      line_spacing_(10.0f),
-      text_length_(0),
-      gap_position_(0),
-      gap_size_(kGapSize),
-      available_width_(kPageWidthMax),
-      character_limit_(std::numeric_limits<size_t>::max()),
-      visible_line_count_(1),
-      next_operation_index_to_undo_(kMaxEditOperations - 1),
-      next_operation_index_to_insert_(0),
-      max_edit_operations_(kMaxEditOperations),
-      character_alignment_(CFX_TxtLineAlignment_Left),
-      has_character_limit_(false),
-      is_comb_text_(false),
-      is_dirty_(false),
-      validation_enabled_(false),
-      is_multiline_(false),
-      is_linewrap_enabled_(false),
-      limit_horizontal_area_(false),
-      limit_vertical_area_(false),
-      password_mode_(false),
-      password_alias_(L'*'),
-      has_selection_(false),
-      selection_({0, 0}) {
+CFDE_TextEditEngine::CFDE_TextEditEngine() {
   content_.resize(gap_size_);
   operation_buffer_.resize(max_edit_operations_);
 
@@ -1219,7 +1189,7 @@
 }
 
 CFDE_TextEditEngine::Iterator::Iterator(const CFDE_TextEditEngine* engine)
-    : engine_(engine), current_position_(-1) {}
+    : engine_(engine) {}
 
 CFDE_TextEditEngine::Iterator::~Iterator() = default;
 
diff --git a/xfa/fde/cfde_texteditengine.h b/xfa/fde/cfde_texteditengine.h
index dd039a0..58948b1 100644
--- a/xfa/fde/cfde_texteditengine.h
+++ b/xfa/fde/cfde_texteditengine.h
@@ -7,6 +7,7 @@
 #ifndef XFA_FDE_CFDE_TEXTEDITENGINE_H_
 #define XFA_FDE_CFDE_TEXTEDITENGINE_H_
 
+#include <limits>
 #include <memory>
 #include <utility>
 #include <vector>
@@ -51,8 +52,8 @@
     bool IsEOF(bool bPrev) const;
 
    private:
-    UnownedPtr<const CFDE_TextEditEngine> engine_;
-    int32_t current_position_;
+    UnownedPtr<const CFDE_TextEditEngine> const engine_;
+    int32_t current_position_ = -1;
   };
 
   class Operation {
@@ -183,6 +184,15 @@
   void SetMaxEditOperationsForTesting(size_t max);
 
  private:
+  struct Selection {
+    size_t start_idx;
+    size_t count;
+  };
+
+  static constexpr size_t kGapSize = 128;
+  static constexpr size_t kMaxEditOperations = 128;
+  static constexpr size_t kPageWidthMax = 0xffff;
+
   void SetCombTextWidth();
   void AdjustGap(size_t idx, size_t length);
   void RebuildPieces();
@@ -198,50 +208,45 @@
   }
   std::vector<CFX_RectF> GetCharRects(const FDE_TEXTEDITPIECE& piece);
 
-  struct Selection {
-    size_t start_idx;
-    size_t count;
-  };
-
   CFX_RectF contents_bounding_box_;
   UnownedPtr<Delegate> delegate_;
   std::vector<FDE_TEXTEDITPIECE> text_piece_info_;
   std::vector<size_t> char_widths_;
   CFGAS_TxtBreak text_break_;
   RetainPtr<CFGAS_GEFont> font_;
-  FX_ARGB font_color_;
-  float font_size_;
-  float line_spacing_;
+  FX_ARGB font_color_ = 0xff000000;
+  float font_size_ = 10.0f;
+  float line_spacing_ = 10.0f;
   std::vector<WideString::CharType> content_;
-  size_t text_length_;
+  size_t text_length_ = 0;
 
   // See e.g. https://en.wikipedia.org/wiki/Gap_buffer
-  size_t gap_position_;
-  size_t gap_size_;
+  size_t gap_position_ = 0;
+  size_t gap_size_ = kGapSize;
 
-  size_t available_width_;
-  size_t character_limit_;
-  size_t visible_line_count_;
+  size_t available_width_ = kPageWidthMax;
+  size_t character_limit_ = std::numeric_limits<size_t>::max();
+  size_t visible_line_count_ = 1;
   // Ring buffer of edit operations
   std::vector<std::unique_ptr<Operation>> operation_buffer_;
   // Next edit operation to undo.
-  size_t next_operation_index_to_undo_;
+  size_t next_operation_index_to_undo_ = kMaxEditOperations - 1;
   // Next index to insert an edit operation into.
-  size_t next_operation_index_to_insert_;
-  size_t max_edit_operations_;
-  uint32_t character_alignment_;
-  bool has_character_limit_;
-  bool is_comb_text_;
-  bool is_dirty_;
-  bool validation_enabled_;
-  bool is_multiline_;
-  bool is_linewrap_enabled_;
-  bool limit_horizontal_area_;
-  bool limit_vertical_area_;
-  bool password_mode_;
-  wchar_t password_alias_;
-  bool has_selection_;
-  Selection selection_;
+  size_t next_operation_index_to_insert_ = 0;
+  size_t max_edit_operations_ = kMaxEditOperations;
+  uint32_t character_alignment_ = CFX_TxtLineAlignment_Left;
+  bool has_character_limit_ = false;
+  bool is_comb_text_ = false;
+  bool is_dirty_ = false;
+  bool validation_enabled_ = false;
+  bool is_multiline_ = false;
+  bool is_linewrap_enabled_ = false;
+  bool limit_horizontal_area_ = false;
+  bool limit_vertical_area_ = false;
+  bool password_mode_ = false;
+  wchar_t password_alias_ = L'*';
+  bool has_selection_ = false;
+  Selection selection_{0, 0};
 };
 
 #endif  // XFA_FDE_CFDE_TEXTEDITENGINE_H_
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 9a45efc..af46421 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -599,8 +599,7 @@
 
 }  // namespace
 
-CFGAS_FontDescriptor::CFGAS_FontDescriptor()
-    : m_nFaceIndex(0), m_dwFontStyles(0), m_dwUsb(), m_dwCsb() {}
+CFGAS_FontDescriptor::CFGAS_FontDescriptor() = default;
 
 CFGAS_FontDescriptor::~CFGAS_FontDescriptor() = default;
 
diff --git a/xfa/fgas/font/cfgas_fontmgr.h b/xfa/fgas/font/cfgas_fontmgr.h
index 4b5d59e..ac7171b 100644
--- a/xfa/fgas/font/cfgas_fontmgr.h
+++ b/xfa/fgas/font/cfgas_fontmgr.h
@@ -68,12 +68,12 @@
   CFGAS_FontDescriptor();
   ~CFGAS_FontDescriptor();
 
-  int32_t m_nFaceIndex;
-  uint32_t m_dwFontStyles;
+  int32_t m_nFaceIndex = 0;
+  uint32_t m_dwFontStyles = 0;
   WideString m_wsFaceName;
   std::vector<WideString> m_wsFamilyNames;
-  uint32_t m_dwUsb[4];
-  uint32_t m_dwCsb[2];
+  uint32_t m_dwUsb[4] = {};
+  uint32_t m_dwCsb[2] = {};
 };
 
 class CFGAS_FontDescriptorInfo {
