Share read validator between CPDF_DataAvail and CPDF_SyntaxParser.

Change-Id: I61c92050b034fbffa747a2519aba368e9678afcd
Reviewed-on: https://pdfium-review.googlesource.com/15850
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 f1a5d0c..cc75ee3 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -916,10 +916,6 @@
   return resource_avail->CheckAvail();
 }
 
-RetainPtr<IFX_SeekableReadStream> CPDF_DataAvail::GetFileRead() const {
-  return m_pFileRead;
-}
-
 RetainPtr<CPDF_ReadValidator> CPDF_DataAvail::GetValidator() const {
   return m_pFileRead;
 }
@@ -1029,7 +1025,7 @@
 
   CPDF_ReadValidator::Session read_session(GetValidator().Get());
   CPDF_Parser::Error error = document->GetParser()->StartLinearizedParse(
-      GetFileRead(), document.get());
+      GetValidator(), document.get());
 
   // Additional check, that all ok.
   if (GetValidator()->has_read_problems()) {
diff --git a/core/fpdfapi/parser/cpdf_data_avail.h b/core/fpdfapi/parser/cpdf_data_avail.h
index 08bb77a..2ea93fa 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.h
+++ b/core/fpdfapi/parser/cpdf_data_avail.h
@@ -100,7 +100,6 @@
   DocAvailStatus IsPageAvail(uint32_t dwPage, DownloadHints* pHints);
   DocFormStatus IsFormAvail(DownloadHints* pHints);
   DocLinearizationStatus IsLinearizedPDF();
-  RetainPtr<IFX_SeekableReadStream> GetFileRead() const;
   int GetPageCount() const;
   CPDF_Dictionary* GetPageDictionary(int index) const;
   RetainPtr<CPDF_ReadValidator> GetValidator() const;
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index d8ac8c9..ba993c2 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -16,6 +16,7 @@
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fpdfapi/parser/cpdf_linearized_header.h"
 #include "core/fpdfapi/parser/cpdf_number.h"
+#include "core/fpdfapi/parser/cpdf_read_validator.h"
 #include "core/fpdfapi/parser/cpdf_reference.h"
 #include "core/fpdfapi/parser/cpdf_security_handler.h"
 #include "core/fpdfapi/parser/cpdf_stream.h"
@@ -201,14 +202,14 @@
 }
 
 bool CPDF_Parser::InitSyntaxParser(
-    const RetainPtr<IFX_SeekableReadStream>& file_access) {
-  const int32_t header_offset = GetHeaderOffset(file_access);
+    const RetainPtr<CPDF_ReadValidator>& validator) {
+  const int32_t header_offset = GetHeaderOffset(validator);
   if (header_offset == kInvalidHeaderOffset)
     return false;
-  if (file_access->GetSize() < header_offset + kPDFHeaderSize)
+  if (validator->GetSize() < header_offset + kPDFHeaderSize)
     return false;
 
-  m_pSyntax->InitParser(file_access, header_offset);
+  m_pSyntax->InitParserWithValidator(validator, header_offset);
   return ParseFileVersion();
 }
 
@@ -232,7 +233,8 @@
 CPDF_Parser::Error CPDF_Parser::StartParse(
     const RetainPtr<IFX_SeekableReadStream>& pFileAccess,
     CPDF_Document* pDocument) {
-  if (!InitSyntaxParser(pFileAccess))
+  if (!InitSyntaxParser(
+          pdfium::MakeRetain<CPDF_ReadValidator>(pFileAccess, nullptr)))
     return FORMAT_ERROR;
   return StartParseInternal(pDocument);
 }
@@ -1327,13 +1329,13 @@
 }
 
 CPDF_Parser::Error CPDF_Parser::StartLinearizedParse(
-    const RetainPtr<IFX_SeekableReadStream>& pFileAccess,
+    const RetainPtr<CPDF_ReadValidator>& validator,
     CPDF_Document* pDocument) {
   ASSERT(!m_bHasParsed);
   m_bXRefStream = false;
   m_LastXRefOffset = 0;
 
-  if (!InitSyntaxParser(pFileAccess))
+  if (!InitSyntaxParser(validator))
     return FORMAT_ERROR;
 
   m_pLinearized = ParseLinearizedHeader();
diff --git a/core/fpdfapi/parser/cpdf_parser.h b/core/fpdfapi/parser/cpdf_parser.h
index 08bb901..5f0a4a1 100644
--- a/core/fpdfapi/parser/cpdf_parser.h
+++ b/core/fpdfapi/parser/cpdf_parser.h
@@ -26,6 +26,7 @@
 class CPDF_IndirectObjectHolder;
 class CPDF_LinearizedHeader;
 class CPDF_Object;
+class CPDF_ReadValidator;
 class CPDF_SecurityHandler;
 class CPDF_StreamAcc;
 class CPDF_SyntaxParser;
@@ -52,7 +53,7 @@
 
   Error StartParse(const RetainPtr<IFX_SeekableReadStream>& pFile,
                    CPDF_Document* pDocument);
-  Error StartLinearizedParse(const RetainPtr<IFX_SeekableReadStream>& pFile,
+  Error StartLinearizedParse(const RetainPtr<CPDF_ReadValidator>& validator,
                              CPDF_Document* pDocument);
 
   void SetPassword(const char* password) { m_Password = password; }
@@ -195,7 +196,7 @@
       CPDF_SyntaxParser::ParseType parse_type,
       FX_FILESIZE* pResultPos);
 
-  bool InitSyntaxParser(const RetainPtr<IFX_SeekableReadStream>& file_access);
+  bool InitSyntaxParser(const RetainPtr<CPDF_ReadValidator>& validator);
   bool ParseFileVersion();
 
   ObjectType GetObjectType(uint32_t objnum) const;