diff --git a/core/fpdfapi/parser/cpdf_cross_ref_avail.cpp b/core/fpdfapi/parser/cpdf_cross_ref_avail.cpp
index 9167812..514f73b 100644
--- a/core/fpdfapi/parser/cpdf_cross_ref_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_cross_ref_avail.cpp
@@ -34,13 +34,13 @@
 CPDF_CrossRefAvail::~CPDF_CrossRefAvail() = default;
 
 CPDF_DataAvail::DocAvailStatus CPDF_CrossRefAvail::CheckAvail() {
-  if (current_status_ == CPDF_DataAvail::DataAvailable)
+  if (status_ == CPDF_DataAvail::DataAvailable)
     return CPDF_DataAvail::DataAvailable;
 
   const CPDF_ReadValidator::Session read_session(GetValidator());
   while (true) {
     bool check_result = false;
-    switch (current_state_) {
+    switch (state_) {
       case State::kCrossRefCheck:
         check_result = CheckCrossRef();
         break;
@@ -53,7 +53,7 @@
       case State::kDone:
         break;
       default: {
-        current_status_ = CPDF_DataAvail::DataError;
+        status_ = CPDF_DataAvail::DataError;
         NOTREACHED();
         break;
       }
@@ -63,12 +63,12 @@
 
     ASSERT(!GetValidator()->has_read_problems());
   }
-  return current_status_;
+  return status_;
 }
 
 bool CPDF_CrossRefAvail::CheckReadProblems() {
   if (GetValidator()->read_error()) {
-    current_status_ = CPDF_DataAvail::DataError;
+    status_ = CPDF_DataAvail::DataError;
     return true;
   }
   return GetValidator()->has_unavailable_data();
@@ -77,8 +77,8 @@
 bool CPDF_CrossRefAvail::CheckCrossRef() {
   if (cross_refs_for_check_.empty()) {
     // All cross refs were checked.
-    current_state_ = State::kDone;
-    current_status_ = CPDF_DataAvail::DataAvailable;
+    state_ = State::kDone;
+    status_ = CPDF_DataAvail::DataAvailable;
     return true;
   }
   parser_->SetPos(cross_refs_for_check_.front());
@@ -102,36 +102,36 @@
     return false;
 
   if (keyword != kCrossRefKeyword) {
-    current_status_ = CPDF_DataAvail::DataError;
+    status_ = CPDF_DataAvail::DataError;
     return false;
   }
 
-  current_state_ = State::kCrossRefV4ItemCheck;
-  current_offset_ = parser_->GetPos();
+  state_ = State::kCrossRefV4ItemCheck;
+  offset_ = parser_->GetPos();
   return true;
 }
 
 bool CPDF_CrossRefAvail::CheckCrossRefV4Item() {
-  parser_->SetPos(current_offset_);
+  parser_->SetPos(offset_);
   const ByteString keyword = parser_->GetKeyword();
   if (CheckReadProblems())
     return false;
 
   if (keyword.IsEmpty()) {
-    current_status_ = CPDF_DataAvail::DataError;
+    status_ = CPDF_DataAvail::DataError;
     return false;
   }
 
   if (keyword == kTrailerKeyword)
-    current_state_ = State::kCrossRefV4TrailerCheck;
+    state_ = State::kCrossRefV4TrailerCheck;
 
   // Go to next item.
-  current_offset_ = parser_->GetPos();
+  offset_ = parser_->GetPos();
   return true;
 }
 
 bool CPDF_CrossRefAvail::CheckCrossRefV4Trailer() {
-  parser_->SetPos(current_offset_);
+  parser_->SetPos(offset_);
 
   RetainPtr<CPDF_Dictionary> trailer =
       ToDictionary(parser_->GetObjectBody(nullptr));
@@ -139,12 +139,12 @@
     return false;
 
   if (!trailer) {
-    current_status_ = CPDF_DataAvail::DataError;
+    status_ = CPDF_DataAvail::DataError;
     return false;
   }
 
   if (ToReference(trailer->GetObjectFor(kEncryptKey))) {
-    current_status_ = CPDF_DataAvail::DataError;
+    status_ = CPDF_DataAvail::DataError;
     return false;
   }
 
@@ -162,7 +162,7 @@
     AddCrossRefForCheck(static_cast<FX_FILESIZE>(stream_xref_offset));
 
   // Goto check next crossref
-  current_state_ = State::kCrossRefCheck;
+  state_ = State::kCrossRefCheck;
   return true;
 }
 
@@ -175,12 +175,12 @@
   const CPDF_Dictionary* trailer =
       cross_ref && cross_ref->IsStream() ? cross_ref->GetDict() : nullptr;
   if (!trailer) {
-    current_status_ = CPDF_DataAvail::DataError;
+    status_ = CPDF_DataAvail::DataError;
     return false;
   }
 
   if (ToReference(trailer->GetObjectFor(kEncryptKey))) {
-    current_status_ = CPDF_DataAvail::DataError;
+    status_ = CPDF_DataAvail::DataError;
     return false;
   }
 
@@ -192,7 +192,7 @@
     }
   }
   // Goto check next crossref
-  current_state_ = State::kCrossRefCheck;
+  state_ = State::kCrossRefCheck;
   return true;
 }
 
diff --git a/core/fpdfapi/parser/cpdf_cross_ref_avail.h b/core/fpdfapi/parser/cpdf_cross_ref_avail.h
index e550410..2e095e4 100644
--- a/core/fpdfapi/parser/cpdf_cross_ref_avail.h
+++ b/core/fpdfapi/parser/cpdf_cross_ref_avail.h
@@ -42,12 +42,11 @@
 
   RetainPtr<CPDF_ReadValidator> GetValidator();
 
-  UnownedPtr<CPDF_SyntaxParser> parser_;
-  const FX_FILESIZE last_crossref_offset_ = 0;
-  CPDF_DataAvail::DocAvailStatus current_status_ =
-      CPDF_DataAvail::DataNotAvailable;
-  State current_state_ = State::kCrossRefCheck;
-  FX_FILESIZE current_offset_ = 0;
+  UnownedPtr<CPDF_SyntaxParser> const parser_;
+  const FX_FILESIZE last_crossref_offset_;
+  CPDF_DataAvail::DocAvailStatus status_ = CPDF_DataAvail::DataNotAvailable;
+  State state_ = State::kCrossRefCheck;
+  FX_FILESIZE offset_ = 0;
   std::queue<FX_FILESIZE> cross_refs_for_check_;
   std::set<FX_FILESIZE> registered_crossrefs_;
 };
