Check first page number in IsLinearizedHeaderValid().

This should allow https://pdfium-review.googlesource.com/15770 to safely
reland.

BUG=chromium:781529

Change-Id: Id0c1bde3280fb72125d8e74751b9a1cb35302b6f
Reviewed-on: https://pdfium-review.googlesource.com/18170
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_linearized_header.cpp b/core/fpdfapi/parser/cpdf_linearized_header.cpp
index 3251a5e..994d69f 100644
--- a/core/fpdfapi/parser/cpdf_linearized_header.cpp
+++ b/core/fpdfapi/parser/cpdf_linearized_header.cpp
@@ -7,6 +7,7 @@
 #include "core/fpdfapi/parser/cpdf_linearized_header.h"
 
 #include <algorithm>
+#include <limits>
 #include <utility>
 
 #include "core/fpdfapi/parser/cpdf_array.h"
@@ -18,6 +19,7 @@
 namespace {
 
 constexpr FX_FILESIZE kLinearizedHeaderOffset = 9;
+constexpr size_t kMaxInt = static_cast<size_t>(std::numeric_limits<int>::max());
 
 template <class T>
 bool IsValidNumericDictionaryValue(const CPDF_Dictionary* pDict,
@@ -39,6 +41,8 @@
                              FX_FILESIZE file_size) {
   ASSERT(header);
   return header->GetFileSize() == file_size &&
+         static_cast<int>(header->GetFirstPageNo()) >= 0 &&
+         header->GetFirstPageNo() < kMaxInt &&
          header->GetMainXRefTableFirstEntryOffset() < file_size &&
          header->GetPageCount() > 0 &&
          header->GetFirstPageEndOffset() < file_size &&