diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp
index 146c78b..6b324f0 100644
--- a/core/fxcrt/xml/cfx_xmlparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -262,7 +262,7 @@
           break;
         case FDE_XmlSyntaxState::AttriValue:
           if (ch == current_quote_character) {
-            if (entity_start_ > -1)
+            if (entity_start_.has_value())
               return false;
 
             current_quote_character = 0;
@@ -470,27 +470,27 @@
 void CFX_XMLParser::ProcessTextChar(wchar_t character) {
   current_text_.push_back(character);
 
-  if (entity_start_ > -1 && character == L';') {
+  if (entity_start_.has_value() && character == L';') {
     // Copy the entity out into a string and remove from the vector. When we
     // copy the entity we don't want to copy out the & or the ; so we start
     // shifted by one and want to copy 2 less characters in total.
-    WideString csEntity(current_text_.data() + entity_start_ + 1,
-                        current_text_.size() - entity_start_ - 2);
-    current_text_.erase(current_text_.begin() + entity_start_,
+    WideString csEntity(current_text_.data() + entity_start_.value() + 1,
+                        current_text_.size() - entity_start_.value() - 2);
+    current_text_.erase(current_text_.begin() + entity_start_.value(),
                         current_text_.end());
 
-    int32_t iLen = csEntity.GetLength();
+    size_t iLen = csEntity.GetLength();
     if (iLen > 0) {
       if (csEntity[0] == L'#') {
         uint32_t ch = 0;
         if (iLen > 1 && csEntity[1] == L'x') {
-          for (int32_t i = 2; i < iLen; i++) {
+          for (size_t i = 2; i < iLen; i++) {
             if (!FXSYS_IsHexDigit(csEntity[i]))
               break;
             ch = (ch << 4) + FXSYS_HexCharToInt(csEntity[i]);
           }
         } else {
-          for (int32_t i = 1; i < iLen; i++) {
+          for (size_t i = 1; i < iLen; i++) {
             if (!FXSYS_IsDecimalDigit(csEntity[i]))
               break;
             ch = ch * 10 + FXSYS_DecimalCharToInt(csEntity[i]);
@@ -516,9 +516,8 @@
         }
       }
     }
-
-    entity_start_ = -1;
-  } else if (entity_start_ < 0 && character == L'&') {
+    entity_start_ = absl::nullopt;
+  } else if (!entity_start_.has_value() && character == L'&') {
     entity_start_ = current_text_.size() - 1;
   }
 }
@@ -535,7 +534,7 @@
 
 WideString CFX_XMLParser::GetTextData() {
   WideString ret(current_text_.data(), current_text_.size());
-  entity_start_ = -1;
+  entity_start_ = absl::nullopt;
   current_text_.clear();
   current_text_.reserve(kCurrentTextReserve);
   return ret;
diff --git a/core/fxcrt/xml/cfx_xmlparser.h b/core/fxcrt/xml/cfx_xmlparser.h
index 7e1cba7..81490f2 100644
--- a/core/fxcrt/xml/cfx_xmlparser.h
+++ b/core/fxcrt/xml/cfx_xmlparser.h
@@ -13,6 +13,7 @@
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/retain_ptr.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 class CFX_SeekableStreamProxy;
 class CFX_XMLDocument;
@@ -57,7 +58,7 @@
   RetainPtr<CFX_SeekableStreamProxy> stream_;
   std::vector<wchar_t, FxAllocAllocator<wchar_t>> current_text_;
   size_t xml_plane_size_ = 1024;
-  int32_t entity_start_ = -1;
+  absl::optional<size_t> entity_start_;
 };
 
 #endif  // CORE_FXCRT_XML_CFX_XMLPARSER_H_
