Simplify check info availability.

Change-Id: I4475b83f69426b135c304d5861f0b7bb582deb81
Reviewed-on: https://pdfium-review.googlesource.com/17731
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Art Snake <art-snake@yandex-team.ru>
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index cc75ee3..0b1788b 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -199,7 +199,6 @@
   }
 
   m_dwRootObjNum = m_parser.GetRootObjNum();
-  m_dwInfoObjNum = m_parser.GetInfoObjNum();
   m_docStatus = PDF_DATAAVAIL_ROOT;
   return true;
 }
@@ -228,15 +227,17 @@
 }
 
 bool CPDF_DataAvail::CheckInfo() {
-  bool bExist = false;
-  std::unique_ptr<CPDF_Object> pInfo = GetObject(m_dwInfoObjNum, &bExist);
-  if (bExist && !pInfo) {
-    if (m_docStatus == PDF_DATAAVAIL_ERROR) {
-      m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
-      return true;
-    }
-    return false;
+  const uint32_t dwInfoObjNum = m_parser.GetInfoObjNum();
+  if (dwInfoObjNum == CPDF_Object::kInvalidObjNum) {
+    m_docStatus = PDF_DATAAVAIL_PAGETREE;
+    return true;
   }
+
+  const CPDF_ReadValidator::Session read_session(GetValidator().Get());
+  m_parser.ParseIndirectObject(nullptr, dwInfoObjNum);
+  if (GetValidator()->has_read_problems())
+    return false;
+
   m_docStatus = PDF_DATAAVAIL_PAGETREE;
   return true;
 }
@@ -271,7 +272,7 @@
 
   m_PagesObjNum = pRef->GetRefObjNum();
 
-  m_docStatus = m_dwInfoObjNum ? PDF_DATAAVAIL_INFO : PDF_DATAAVAIL_PAGETREE;
+  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 2ea93fa..0d9b902 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.h
+++ b/core/fpdfapi/parser/cpdf_data_avail.h
@@ -167,7 +167,6 @@
   CPDF_Parser m_parser;
   std::unique_ptr<CPDF_Object> m_pRoot;
   uint32_t m_dwRootObjNum = 0;
-  uint32_t m_dwInfoObjNum = 0;
   std::unique_ptr<CPDF_LinearizedHeader> m_pLinearized;
   bool m_bDocAvail = false;
   std::unique_ptr<CPDF_CrossRefAvail> m_pCrossRefAvail;
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index ba993c2..73b4bcd 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -69,7 +69,7 @@
 
     // Info is optional.
     uint32_t info_obj_num = GetInfoObjNum();
-    if (info_obj_num > 0)
+    if (info_obj_num != CPDF_Object::kInvalidObjNum)
       result->SetNewFor<CPDF_Reference>("Info", nullptr, GetInfoObjNum());
 
     // Root is required.
@@ -90,8 +90,8 @@
 
   void Clear() {
     main_trailer_.reset();
-    last_info_obj_num_ = 0;
-    last_root_obj_num_ = 0;
+    last_info_obj_num_ = CPDF_Object::kInvalidObjNum;
+    last_root_obj_num_ = CPDF_Object::kInvalidObjNum;
   }
 
   uint32_t GetInfoObjNum() const {
@@ -120,8 +120,8 @@
   }
 
   std::unique_ptr<CPDF_Dictionary> main_trailer_;
-  uint32_t last_info_obj_num_ = 0;
-  uint32_t last_root_obj_num_ = 0;
+  uint32_t last_info_obj_num_ = CPDF_Object::kInvalidObjNum;
+  uint32_t last_root_obj_num_ = CPDF_Object::kInvalidObjNum;
 };
 
 CPDF_Parser::CPDF_Parser()
@@ -286,9 +286,9 @@
     if (!m_pDocument->GetRoot())
       return FORMAT_ERROR;
   }
-  if (GetRootObjNum() == 0) {
+  if (GetRootObjNum() == CPDF_Object::kInvalidObjNum) {
     ReleaseEncryptHandler();
-    if (!RebuildCrossRef() || GetRootObjNum() == 0)
+    if (!RebuildCrossRef() || GetRootObjNum() == CPDF_Object::kInvalidObjNum)
       return FORMAT_ERROR;
 
     eRet = SetEncryptHandler();
@@ -1389,9 +1389,9 @@
       return FORMAT_ERROR;
   }
 
-  if (GetRootObjNum() == 0) {
+  if (GetRootObjNum() == CPDF_Object::kInvalidObjNum) {
     ReleaseEncryptHandler();
-    if (!RebuildCrossRef() || GetRootObjNum() == 0)
+    if (!RebuildCrossRef() || GetRootObjNum() == CPDF_Object::kInvalidObjNum)
       return FORMAT_ERROR;
 
     eRet = SetEncryptHandler();