OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "core/fpdfapi/fpdf_edit/editint.h" | 7 #include "core/fpdfapi/fpdf_edit/editint.h" |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
892 m_dwFlags(0), | 892 m_dwFlags(0), |
893 m_Pos(nullptr), | 893 m_Pos(nullptr), |
894 m_XrefStart(0), | 894 m_XrefStart(0), |
895 m_pIDArray(nullptr), | 895 m_pIDArray(nullptr), |
896 m_FileVersion(0) {} | 896 m_FileVersion(0) {} |
897 | 897 |
898 CPDF_Creator::~CPDF_Creator() { | 898 CPDF_Creator::~CPDF_Creator() { |
899 ResetStandardSecurity(); | 899 ResetStandardSecurity(); |
900 if (m_bEncryptCloned && m_pEncryptDict) { | 900 if (m_bEncryptCloned && m_pEncryptDict) { |
901 m_pEncryptDict->Release(); | 901 m_pEncryptDict->Release(); |
902 m_pEncryptDict = NULL; | 902 m_pEncryptDict = nullptr; |
903 } | 903 } |
904 Clear(); | 904 Clear(); |
905 } | 905 } |
906 | 906 |
907 int32_t CPDF_Creator::WriteIndirectObjectToStream(const CPDF_Object* pObj) { | 907 int32_t CPDF_Creator::WriteIndirectObjectToStream(const CPDF_Object* pObj) { |
908 if (!m_pXRefStream) | 908 if (!m_pXRefStream) |
909 return 1; | 909 return 1; |
910 | 910 |
911 uint32_t objnum = pObj->GetObjNum(); | 911 uint32_t objnum = pObj->GetObjNum(); |
912 if (m_pParser && m_pParser->GetObjectGenNum(objnum) > 0) | 912 if (m_pParser && m_pParser->GetObjectGenNum(objnum) > 0) |
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1434 int32_t CPDF_Creator::WriteDoc_Stage1(IFX_Pause* pPause) { | 1434 int32_t CPDF_Creator::WriteDoc_Stage1(IFX_Pause* pPause) { |
1435 ASSERT(m_iStage > -1 || m_iStage < 20); | 1435 ASSERT(m_iStage > -1 || m_iStage < 20); |
1436 if (m_iStage == 0) { | 1436 if (m_iStage == 0) { |
1437 if (!m_pParser) { | 1437 if (!m_pParser) { |
1438 m_dwFlags &= ~FPDFCREATE_INCREMENTAL; | 1438 m_dwFlags &= ~FPDFCREATE_INCREMENTAL; |
1439 } | 1439 } |
1440 if (m_bSecurityChanged && (m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0) { | 1440 if (m_bSecurityChanged && (m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0) { |
1441 m_dwFlags &= ~FPDFCREATE_INCREMENTAL; | 1441 m_dwFlags &= ~FPDFCREATE_INCREMENTAL; |
1442 } | 1442 } |
1443 CPDF_Dictionary* pDict = m_pDocument->GetRoot(); | 1443 CPDF_Dictionary* pDict = m_pDocument->GetRoot(); |
1444 m_pMetadata = pDict ? pDict->GetDirectObjectBy("Metadata") : NULL; | 1444 m_pMetadata = pDict ? pDict->GetDirectObjectBy("Metadata") : nullptr; |
1445 if (m_dwFlags & FPDFCREATE_OBJECTSTREAM) { | 1445 if (m_dwFlags & FPDFCREATE_OBJECTSTREAM) { |
1446 m_pXRefStream.reset(new CPDF_XRefStream); | 1446 m_pXRefStream.reset(new CPDF_XRefStream); |
1447 m_pXRefStream->Start(); | 1447 m_pXRefStream->Start(); |
1448 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0 && m_pParser) { | 1448 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0 && m_pParser) { |
1449 FX_FILESIZE prev = m_pParser->GetLastXRefOffset(); | 1449 FX_FILESIZE prev = m_pParser->GetLastXRefOffset(); |
1450 m_pXRefStream->m_PrevOffset = prev; | 1450 m_pXRefStream->m_PrevOffset = prev; |
1451 } | 1451 } |
1452 } | 1452 } |
1453 m_iStage = 10; | 1453 m_iStage = 10; |
1454 } | 1454 } |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1549 } | 1549 } |
1550 if (m_iStage == 26) { | 1550 if (m_iStage == 26) { |
1551 int32_t iRet = | 1551 int32_t iRet = |
1552 WriteNewObjs((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0, pPause); | 1552 WriteNewObjs((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0, pPause); |
1553 if (iRet) { | 1553 if (iRet) { |
1554 return iRet; | 1554 return iRet; |
1555 } | 1555 } |
1556 m_iStage = 27; | 1556 m_iStage = 27; |
1557 } | 1557 } |
1558 if (m_iStage == 27) { | 1558 if (m_iStage == 27) { |
1559 if (NULL != m_pEncryptDict && 0 == m_pEncryptDict->GetObjNum()) { | 1559 if (m_pEncryptDict && 0 == m_pEncryptDict->GetObjNum()) { |
1560 m_dwLastObjNum += 1; | 1560 m_dwLastObjNum += 1; |
1561 FX_FILESIZE saveOffset = m_Offset; | 1561 FX_FILESIZE saveOffset = m_Offset; |
1562 if (WriteIndirectObj(m_dwLastObjNum, m_pEncryptDict) < 0) { | 1562 if (WriteIndirectObj(m_dwLastObjNum, m_pEncryptDict) < 0) { |
1563 return -1; | 1563 return -1; |
1564 } | 1564 } |
1565 m_ObjectOffset.Add(m_dwLastObjNum, 1); | 1565 m_ObjectOffset.Add(m_dwLastObjNum, 1); |
1566 m_ObjectOffset[m_dwLastObjNum] = saveOffset; | 1566 m_ObjectOffset[m_dwLastObjNum] = saveOffset; |
1567 m_dwEncryptObjNum = m_dwLastObjNum; | 1567 m_dwEncryptObjNum = m_dwLastObjNum; |
1568 if (m_dwFlags & FPDFCREATE_INCREMENTAL) { | 1568 if (m_dwFlags & FPDFCREATE_INCREMENTAL) { |
1569 m_NewObjNumArray.Add(m_dwLastObjNum); | 1569 m_NewObjNumArray.Add(m_dwLastObjNum); |
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1892 } | 1892 } |
1893 m_File.Flush(); | 1893 m_File.Flush(); |
1894 return m_iStage = 100; | 1894 return m_iStage = 100; |
1895 } | 1895 } |
1896 void CPDF_Creator::Clear() { | 1896 void CPDF_Creator::Clear() { |
1897 m_pXRefStream.reset(); | 1897 m_pXRefStream.reset(); |
1898 m_File.Clear(); | 1898 m_File.Clear(); |
1899 m_NewObjNumArray.RemoveAll(); | 1899 m_NewObjNumArray.RemoveAll(); |
1900 if (m_pIDArray) { | 1900 if (m_pIDArray) { |
1901 m_pIDArray->Release(); | 1901 m_pIDArray->Release(); |
1902 m_pIDArray = NULL; | 1902 m_pIDArray = nullptr; |
1903 } | 1903 } |
1904 } | 1904 } |
1905 | 1905 |
1906 bool CPDF_Creator::Create(IFX_StreamWrite* pFile, uint32_t flags) { | 1906 bool CPDF_Creator::Create(IFX_StreamWrite* pFile, uint32_t flags) { |
1907 m_File.AttachFile(pFile); | 1907 m_File.AttachFile(pFile); |
1908 return Create(flags); | 1908 return Create(flags); |
1909 } | 1909 } |
1910 | 1910 |
1911 bool CPDF_Creator::Create(uint32_t flags) { | 1911 bool CPDF_Creator::Create(uint32_t flags) { |
1912 m_dwFlags = flags; | 1912 m_dwFlags = flags; |
1913 m_iStage = 0; | 1913 m_iStage = 0; |
1914 m_Offset = 0; | 1914 m_Offset = 0; |
1915 m_dwLastObjNum = m_pDocument->GetLastObjNum(); | 1915 m_dwLastObjNum = m_pDocument->GetLastObjNum(); |
1916 m_ObjectOffset.Clear(); | 1916 m_ObjectOffset.Clear(); |
1917 m_NewObjNumArray.RemoveAll(); | 1917 m_NewObjNumArray.RemoveAll(); |
1918 InitID(); | 1918 InitID(); |
1919 if (flags & FPDFCREATE_PROGRESSIVE) { | 1919 if (flags & FPDFCREATE_PROGRESSIVE) { |
1920 return true; | 1920 return true; |
1921 } | 1921 } |
1922 return Continue(NULL) > -1; | 1922 return Continue(nullptr) > -1; |
1923 } | 1923 } |
1924 void CPDF_Creator::InitID(FX_BOOL bDefault) { | 1924 void CPDF_Creator::InitID(FX_BOOL bDefault) { |
1925 CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : NULL; | 1925 CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : nullptr; |
1926 FX_BOOL bNewId = !m_pIDArray; | 1926 FX_BOOL bNewId = !m_pIDArray; |
1927 if (!m_pIDArray) { | 1927 if (!m_pIDArray) { |
1928 m_pIDArray = new CPDF_Array; | 1928 m_pIDArray = new CPDF_Array; |
1929 CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetObjectAt(0) : NULL; | 1929 CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetObjectAt(0) : nullptr; |
1930 if (pID1) { | 1930 if (pID1) { |
1931 m_pIDArray->Add(pID1->Clone()); | 1931 m_pIDArray->Add(pID1->Clone()); |
1932 } else { | 1932 } else { |
1933 std::vector<uint8_t> buffer = | 1933 std::vector<uint8_t> buffer = |
1934 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum); | 1934 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum); |
1935 CFX_ByteString bsBuffer(buffer.data(), buffer.size()); | 1935 CFX_ByteString bsBuffer(buffer.data(), buffer.size()); |
1936 m_pIDArray->Add(new CPDF_String(bsBuffer, TRUE), m_pDocument); | 1936 m_pIDArray->Add(new CPDF_String(bsBuffer, TRUE), m_pDocument); |
1937 } | 1937 } |
1938 } | 1938 } |
1939 if (!bDefault) { | 1939 if (!bDefault) { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2009 m_pCryptoHandler = nullptr; | 2009 m_pCryptoHandler = nullptr; |
2010 } | 2010 } |
2011 void CPDF_Creator::ResetStandardSecurity() { | 2011 void CPDF_Creator::ResetStandardSecurity() { |
2012 if (!m_bLocalCryptoHandler) | 2012 if (!m_bLocalCryptoHandler) |
2013 return; | 2013 return; |
2014 | 2014 |
2015 delete m_pCryptoHandler; | 2015 delete m_pCryptoHandler; |
2016 m_pCryptoHandler = nullptr; | 2016 m_pCryptoHandler = nullptr; |
2017 m_bLocalCryptoHandler = FALSE; | 2017 m_bLocalCryptoHandler = FALSE; |
2018 } | 2018 } |
OLD | NEW |