Simplify check root availability.

Change-Id: I34403490672b752bed9d5b6b29e8f4422c0fbf95
Reviewed-on: https://pdfium-review.googlesource.com/17732
Commit-Queue: Art Snake <art-snake@yandex-team.ru>
Reviewed-by: dsinclair <dsinclair@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index 0b1788b..acc01c65 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -198,7 +198,6 @@
     return false;
   }
 
-  m_dwRootObjNum = m_parser.GetRootObjNum();
   m_docStatus = PDF_DATAAVAIL_ROOT;
   return true;
 }
@@ -243,35 +242,25 @@
 }
 
 bool CPDF_DataAvail::CheckRoot() {
-  bool bExist = false;
-  m_pRoot = GetObject(m_dwRootObjNum, &bExist);
-  if (!bExist) {
-    m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+  const uint32_t dwRootObjNum = m_parser.GetRootObjNum();
+  if (dwRootObjNum == CPDF_Object::kInvalidObjNum) {
+    m_docStatus = PDF_DATAAVAIL_ERROR;
     return true;
   }
 
-  if (!m_pRoot) {
-    if (m_docStatus == PDF_DATAAVAIL_ERROR) {
-      m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
-      return true;
-    }
+  const CPDF_ReadValidator::Session read_session(GetValidator().Get());
+  m_pRoot = ToDictionary(m_parser.ParseIndirectObject(nullptr, dwRootObjNum));
+  if (GetValidator()->has_read_problems())
     return false;
-  }
 
-  CPDF_Dictionary* pDict = m_pRoot->GetDict();
-  if (!pDict) {
-    m_docStatus = PDF_DATAAVAIL_ERROR;
-    return false;
-  }
-
-  CPDF_Reference* pRef = ToReference(pDict->GetObjectFor("Pages"));
+  const CPDF_Reference* pRef =
+      ToReference(m_pRoot ? m_pRoot->GetObjectFor("Pages") : nullptr);
   if (!pRef) {
     m_docStatus = PDF_DATAAVAIL_ERROR;
     return false;
   }
 
   m_PagesObjNum = pRef->GetRefObjNum();
-
   m_docStatus = PDF_DATAAVAIL_INFO;
   return true;
 }
diff --git a/core/fpdfapi/parser/cpdf_data_avail.h b/core/fpdfapi/parser/cpdf_data_avail.h
index 0d9b902..8872bb1 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.h
+++ b/core/fpdfapi/parser/cpdf_data_avail.h
@@ -165,8 +165,7 @@
 
   RetainPtr<CPDF_ReadValidator> m_pFileRead;
   CPDF_Parser m_parser;
-  std::unique_ptr<CPDF_Object> m_pRoot;
-  uint32_t m_dwRootObjNum = 0;
+  std::unique_ptr<CPDF_Dictionary> m_pRoot;
   std::unique_ptr<CPDF_LinearizedHeader> m_pLinearized;
   bool m_bDocAvail = false;
   std::unique_ptr<CPDF_CrossRefAvail> m_pCrossRefAvail;