Make most CPDF_LinearizedHeader members const. Change-Id: I82907ad725861b9ccd6299f5dfe20ddb9d238178 Reviewed-on: https://pdfium-review.googlesource.com/17796 Reviewed-by: dsinclair <dsinclair@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_document_unittest.cpp b/core/fpdfapi/parser/cpdf_document_unittest.cpp index 9e03c96..d1b8dce 100644 --- a/core/fpdfapi/parser/cpdf_document_unittest.cpp +++ b/core/fpdfapi/parser/cpdf_document_unittest.cpp
@@ -133,7 +133,7 @@ class TestLinearized : public CPDF_LinearizedHeader { public: explicit TestLinearized(CPDF_Dictionary* dict) - : CPDF_LinearizedHeader(dict) {} + : CPDF_LinearizedHeader(dict, 0) {} }; class CPDF_TestDocPagesWithoutKids : public CPDF_Document {
diff --git a/core/fpdfapi/parser/cpdf_linearized_header.cpp b/core/fpdfapi/parser/cpdf_linearized_header.cpp index ce22c55..3251a5e 100644 --- a/core/fpdfapi/parser/cpdf_linearized_header.cpp +++ b/core/fpdfapi/parser/cpdf_linearized_header.cpp
@@ -70,22 +70,25 @@ if (parser->GetNextWord(nullptr) != "endobj") return nullptr; - auto result = pdfium::WrapUnique(new CPDF_LinearizedHeader(pDict.get())); - result->m_szLastXRefOffset = parser->GetPos(); + auto result = pdfium::WrapUnique( + new CPDF_LinearizedHeader(pDict.get(), parser->GetPos())); - return IsLinearizedHeaderValid(result.get(), - parser->GetFileAccess()->GetSize()) - ? std::move(result) - : nullptr; + if (!IsLinearizedHeaderValid(result.get(), + parser->GetFileAccess()->GetSize())) { + return nullptr; + } + return result; } -CPDF_LinearizedHeader::CPDF_LinearizedHeader(const CPDF_Dictionary* pDict) { - m_szFileSize = pDict->GetIntegerFor("L"); - m_dwFirstPageNo = pDict->GetIntegerFor("P"); - m_szMainXRefTableFirstEntryOffset = pDict->GetIntegerFor("T"); - m_PageCount = pDict->GetIntegerFor("N"); - m_szFirstPageEndOffset = pDict->GetIntegerFor("E"); - m_FirstPageObjNum = pDict->GetIntegerFor("O"); +CPDF_LinearizedHeader::CPDF_LinearizedHeader(const CPDF_Dictionary* pDict, + FX_FILESIZE szLastXRefOffset) + : m_szFileSize(pDict->GetIntegerFor("L")), + m_dwFirstPageNo(pDict->GetIntegerFor("P")), + m_szMainXRefTableFirstEntryOffset(pDict->GetIntegerFor("T")), + m_PageCount(pDict->GetIntegerFor("N")), + m_szFirstPageEndOffset(pDict->GetIntegerFor("E")), + m_FirstPageObjNum(pDict->GetIntegerFor("O")), + m_szLastXRefOffset(szLastXRefOffset) { const CPDF_Array* pHintStreamRange = pDict->GetArrayFor("H"); const size_t nHintStreamSize = pHintStreamRange ? pHintStreamRange->GetCount() : 0;
diff --git a/core/fpdfapi/parser/cpdf_linearized_header.h b/core/fpdfapi/parser/cpdf_linearized_header.h index d732160..964ae26 100644 --- a/core/fpdfapi/parser/cpdf_linearized_header.h +++ b/core/fpdfapi/parser/cpdf_linearized_header.h
@@ -43,18 +43,19 @@ uint32_t GetHintLength() const { return m_HintLength; } protected: - explicit CPDF_LinearizedHeader(const CPDF_Dictionary* pDict); + CPDF_LinearizedHeader(const CPDF_Dictionary* pDict, + FX_FILESIZE szLastXRefOffset); private: - FX_FILESIZE m_szFileSize = 0; - uint32_t m_dwFirstPageNo = 0; - FX_FILESIZE m_szMainXRefTableFirstEntryOffset = 0; - uint32_t m_PageCount = 0; - FX_FILESIZE m_szFirstPageEndOffset = 0; - uint32_t m_FirstPageObjNum = 0; + const FX_FILESIZE m_szFileSize; + const uint32_t m_dwFirstPageNo; + const FX_FILESIZE m_szMainXRefTableFirstEntryOffset; + const uint32_t m_PageCount; + const FX_FILESIZE m_szFirstPageEndOffset; + const uint32_t m_FirstPageObjNum; + const FX_FILESIZE m_szLastXRefOffset; FX_FILESIZE m_szHintStart = 0; uint32_t m_HintLength = 0; - FX_FILESIZE m_szLastXRefOffset = 0; }; #endif // CORE_FPDFAPI_PARSER_CPDF_LINEARIZED_HEADER_H_
diff --git a/testing/libfuzzer/pdf_hint_table_fuzzer.cc b/testing/libfuzzer/pdf_hint_table_fuzzer.cc index ac4229a..ee51e25 100644 --- a/testing/libfuzzer/pdf_hint_table_fuzzer.cc +++ b/testing/libfuzzer/pdf_hint_table_fuzzer.cc
@@ -49,7 +49,7 @@ class FakeLinearized : public CPDF_LinearizedHeader { public: explicit FakeLinearized(CPDF_Dictionary* linearized_dict) - : CPDF_LinearizedHeader(linearized_dict) {} + : CPDF_LinearizedHeader(linearized_dict, 0) {} }; extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {