diff options
-rw-r--r-- | core/fpdfapi/edit/cpdf_creator.cpp | 35 | ||||
-rw-r--r-- | core/fpdfapi/edit/cpdf_creator.h | 5 |
2 files changed, 19 insertions, 21 deletions
diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp index 5c6da1d4fa..dc2049451a 100644 --- a/core/fpdfapi/edit/cpdf_creator.cpp +++ b/core/fpdfapi/edit/cpdf_creator.cpp @@ -151,7 +151,6 @@ CPDF_Creator::CPDF_Creator(CPDF_Document* pDoc, m_Archive(pdfium::MakeUnique<CFX_FileBufferArchive>(archive)), m_SavedOffset(0), m_iStage(-1), - m_dwFlags(0), m_CurObjNum(0), m_XrefStart(0), m_pIDArray(nullptr), @@ -348,7 +347,7 @@ bool CPDF_Creator::WriteNewObjs() { void CPDF_Creator::InitNewObjNumOffsets() { for (const auto& pair : *m_pDocument) { const uint32_t objnum = pair.first; - if (IsIncremental() || + if (m_IsIncremental || pair.second->GetObjNum() == CPDF_Object::kInvalidObjNum) { continue; } @@ -365,17 +364,15 @@ void CPDF_Creator::InitNewObjNumOffsets() { int32_t CPDF_Creator::WriteDoc_Stage1() { ASSERT(m_iStage > -1 || m_iStage < 20); if (m_iStage == 0) { - if (!m_pParser) - m_dwFlags &= ~FPDFCREATE_INCREMENTAL; - if (m_bSecurityChanged && IsOriginal()) - m_dwFlags &= ~FPDFCREATE_INCREMENTAL; + if (!m_pParser || (m_bSecurityChanged && m_IsOriginal)) + m_IsIncremental = false; const CPDF_Dictionary* pDict = m_pDocument->GetRoot(); m_pMetadata = pDict ? pDict->GetDirectObjectFor("Metadata") : nullptr; m_iStage = 10; } if (m_iStage == 10) { - if (!IsIncremental()) { + if (!m_IsIncremental) { if (!m_Archive->WriteString("%PDF-1.")) return -1; @@ -396,7 +393,7 @@ int32_t CPDF_Creator::WriteDoc_Stage1() { } } if (m_iStage == 15) { - if (IsOriginal() && m_SavedOffset > 0) { + if (m_IsOriginal && m_SavedOffset > 0) { RetainPtr<IFX_SeekableReadStream> pSrcFile = m_pParser->GetFileAccess(); std::vector<uint8_t> buffer(4096); FX_FILESIZE src_size = m_SavedOffset; @@ -413,7 +410,7 @@ int32_t CPDF_Creator::WriteDoc_Stage1() { src_size -= block_size; } } - if (IsOriginal() && m_pParser->GetLastXRefOffset() == 0) { + if (m_IsOriginal && m_pParser->GetLastXRefOffset() == 0) { for (uint32_t num = 0; num <= m_pParser->GetLastObjNum(); ++num) { if (m_pParser->IsObjectFreeOrNull(num)) continue; @@ -430,7 +427,7 @@ int32_t CPDF_Creator::WriteDoc_Stage1() { int32_t CPDF_Creator::WriteDoc_Stage2() { ASSERT(m_iStage >= 20 || m_iStage < 30); if (m_iStage == 20) { - if (!IsIncremental() && m_pParser) { + if (!m_IsIncremental && m_pParser) { m_CurObjNum = 0; m_iStage = 21; } else { @@ -461,7 +458,7 @@ int32_t CPDF_Creator::WriteDoc_Stage2() { return -1; m_ObjectOffsets[m_dwLastObjNum] = saveOffset; - if (IsIncremental()) + if (m_IsIncremental) m_NewObjNumArray.push_back(m_dwLastObjNum); } m_iStage = 80; @@ -475,8 +472,8 @@ int32_t CPDF_Creator::WriteDoc_Stage3() { uint32_t dwLastObjNum = m_dwLastObjNum; if (m_iStage == 80) { m_XrefStart = m_Archive->CurrentOffset(); - if (!IsIncremental() || !m_pParser->IsXRefStream()) { - if (!IsIncremental() || m_pParser->GetLastXRefOffset() == 0) { + if (!m_IsIncremental || !m_pParser->IsXRefStream()) { + if (!m_IsIncremental || m_pParser->GetLastXRefOffset() == 0) { ByteString str; str = pdfium::ContainsKey(m_ObjectOffsets, 1) ? "xref\r\n" @@ -569,7 +566,7 @@ int32_t CPDF_Creator::WriteDoc_Stage3() { int32_t CPDF_Creator::WriteDoc_Stage4() { ASSERT(m_iStage >= 90); - bool bXRefStream = IsIncremental() && m_pParser->IsXRefStream(); + bool bXRefStream = m_IsIncremental && m_pParser->IsXRefStream(); if (!bXRefStream) { if (!m_Archive->WriteString("trailer\r\n<<")) return -1; @@ -629,7 +626,7 @@ int32_t CPDF_Creator::WriteDoc_Stage4() { !m_Archive->WriteDWord(m_dwLastObjNum + (bXRefStream ? 2 : 1))) { return -1; } - if (IsIncremental()) { + if (m_IsIncremental) { FX_FILESIZE prev = m_pParser->GetLastXRefOffset(); if (prev) { if (!m_Archive->WriteString("/Prev ")) @@ -654,7 +651,7 @@ int32_t CPDF_Creator::WriteDoc_Stage4() { } else { if (!m_Archive->WriteString("/W[0 4 1]/Index[")) return -1; - if (IsIncremental() && m_pParser && m_pParser->GetLastXRefOffset() == 0) { + if (m_IsIncremental && m_pParser && m_pParser->GetLastXRefOffset() == 0) { uint32_t i = 0; for (i = 0; i < m_dwLastObjNum; i++) { if (!pdfium::ContainsKey(m_ObjectOffsets, i)) @@ -710,7 +707,9 @@ int32_t CPDF_Creator::WriteDoc_Stage4() { } bool CPDF_Creator::Create(uint32_t flags) { - m_dwFlags = flags; + m_IsIncremental = !!(flags & FPDFCREATE_INCREMENTAL); + m_IsOriginal = !(flags & FPDFCREATE_NO_ORIGINAL); + m_iStage = 0; m_dwLastObjNum = m_pDocument->GetLastObjNum(); m_ObjectOffsets.clear(); @@ -740,7 +739,7 @@ void CPDF_Creator::InitID() { if (pOldIDArray) { const CPDF_Object* pID2 = pOldIDArray->GetObjectAt(1); - if (IsIncremental() && m_pEncryptDict && pID2) { + if (m_IsIncremental && m_pEncryptDict && pID2) { m_pIDArray->Add(pID2->Clone()); return; } diff --git a/core/fpdfapi/edit/cpdf_creator.h b/core/fpdfapi/edit/cpdf_creator.h index 47f279f653..b9c8aa8a80 100644 --- a/core/fpdfapi/edit/cpdf_creator.h +++ b/core/fpdfapi/edit/cpdf_creator.h @@ -60,8 +60,6 @@ class CPDF_Creator { CPDF_CryptoHandler* pCrypto); CPDF_CryptoHandler* GetCryptoHandler(); - bool IsIncremental() const { return !!(m_dwFlags & FPDFCREATE_INCREMENTAL); } - bool IsOriginal() const { return !(m_dwFlags & FPDFCREATE_NO_ORIGINAL); } UnownedPtr<CPDF_Document> const m_pDocument; UnownedPtr<CPDF_Parser> const m_pParser; @@ -73,13 +71,14 @@ class CPDF_Creator { std::unique_ptr<IFX_ArchiveStream> m_Archive; FX_FILESIZE m_SavedOffset; int32_t m_iStage; - uint32_t m_dwFlags; uint32_t m_CurObjNum; FX_FILESIZE m_XrefStart; std::map<uint32_t, FX_FILESIZE> m_ObjectOffsets; std::vector<uint32_t> m_NewObjNumArray; // Sorted, ascending. std::unique_ptr<CPDF_Array> m_pIDArray; int32_t m_FileVersion; + bool m_IsIncremental = false; + bool m_IsOriginal = false; }; #endif // CORE_FPDFAPI_EDIT_CPDF_CREATOR_H_ |