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 796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
807 offset += len; | 807 offset += len; |
808 if (pFile->AppendString("/Length ") < 0) | 808 if (pFile->AppendString("/Length ") < 0) |
809 return FALSE; | 809 return FALSE; |
810 | 810 |
811 if ((len = pFile->AppendDWord(encoder.m_dwSize)) < 0) | 811 if ((len = pFile->AppendDWord(encoder.m_dwSize)) < 0) |
812 return FALSE; | 812 return FALSE; |
813 | 813 |
814 offset += len + 8; | 814 offset += len + 8; |
815 if (bEOF) { | 815 if (bEOF) { |
816 if ((len = PDF_CreatorWriteTrailer(pCreator->m_pDocument, pFile, | 816 if ((len = PDF_CreatorWriteTrailer(pCreator->m_pDocument, pFile, |
817 pCreator->m_pIDArray)) < 0) { | 817 pCreator->m_pIDArray.get())) < 0) { |
818 return FALSE; | 818 return FALSE; |
819 } | 819 } |
820 offset += len; | 820 offset += len; |
821 if (pCreator->m_pEncryptDict) { | 821 if (pCreator->m_pEncryptDict) { |
822 uint32_t dwEncryptObjNum = pCreator->m_pEncryptDict->GetObjNum(); | 822 uint32_t dwEncryptObjNum = pCreator->m_pEncryptDict->GetObjNum(); |
823 if (dwEncryptObjNum == 0) { | 823 if (dwEncryptObjNum == 0) { |
824 dwEncryptObjNum = pCreator->m_dwEncryptObjNum; | 824 dwEncryptObjNum = pCreator->m_dwEncryptObjNum; |
825 } | 825 } |
826 if ((len = PDF_CreatorWriteEncrypt(pCreator->m_pEncryptDict, | 826 if ((len = PDF_CreatorWriteEncrypt(pCreator->m_pEncryptDict, |
827 dwEncryptObjNum, pFile)) < 0) { | 827 dwEncryptObjNum, pFile)) < 0) { |
(...skipping 975 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1803 if (m_File.AppendBlock(offset_buf, FXSYS_strlen(offset_buf)) < 0) { | 1803 if (m_File.AppendBlock(offset_buf, FXSYS_strlen(offset_buf)) < 0) { |
1804 return -1; | 1804 return -1; |
1805 } | 1805 } |
1806 } | 1806 } |
1807 } | 1807 } |
1808 if (m_pIDArray) { | 1808 if (m_pIDArray) { |
1809 if (m_File.AppendString(("/ID")) < 0) { | 1809 if (m_File.AppendString(("/ID")) < 0) { |
1810 return -1; | 1810 return -1; |
1811 } | 1811 } |
1812 FX_FILESIZE offset = 0; | 1812 FX_FILESIZE offset = 0; |
1813 if (PDF_CreatorAppendObject(m_pIDArray, &m_File, offset) < 0) { | 1813 if (PDF_CreatorAppendObject(m_pIDArray.get(), &m_File, offset) < 0) { |
1814 return -1; | 1814 return -1; |
1815 } | 1815 } |
1816 } | 1816 } |
1817 if (!bXRefStream) { | 1817 if (!bXRefStream) { |
1818 if (m_File.AppendString(">>") < 0) { | 1818 if (m_File.AppendString(">>") < 0) { |
1819 return -1; | 1819 return -1; |
1820 } | 1820 } |
1821 } else { | 1821 } else { |
1822 if (m_File.AppendString("/W[0 4 1]/Index[") < 0) { | 1822 if (m_File.AppendString("/W[0 4 1]/Index[") < 0) { |
1823 return -1; | 1823 return -1; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1897 return -1; | 1897 return -1; |
1898 } | 1898 } |
1899 m_File.Flush(); | 1899 m_File.Flush(); |
1900 return m_iStage = 100; | 1900 return m_iStage = 100; |
1901 } | 1901 } |
1902 | 1902 |
1903 void CPDF_Creator::Clear() { | 1903 void CPDF_Creator::Clear() { |
1904 m_pXRefStream.reset(); | 1904 m_pXRefStream.reset(); |
1905 m_File.Clear(); | 1905 m_File.Clear(); |
1906 m_NewObjNumArray.RemoveAll(); | 1906 m_NewObjNumArray.RemoveAll(); |
1907 if (m_pIDArray) { | 1907 m_pIDArray.reset(); |
1908 m_pIDArray->Release(); | |
1909 m_pIDArray = nullptr; | |
1910 } | |
1911 } | 1908 } |
1912 | 1909 |
1913 bool CPDF_Creator::Create(IFX_StreamWrite* pFile, uint32_t flags) { | 1910 bool CPDF_Creator::Create(IFX_StreamWrite* pFile, uint32_t flags) { |
1914 m_File.AttachFile(pFile); | 1911 m_File.AttachFile(pFile); |
1915 return Create(flags); | 1912 return Create(flags); |
1916 } | 1913 } |
1917 | 1914 |
1918 bool CPDF_Creator::Create(uint32_t flags) { | 1915 bool CPDF_Creator::Create(uint32_t flags) { |
1919 m_dwFlags = flags; | 1916 m_dwFlags = flags; |
1920 m_iStage = 0; | 1917 m_iStage = 0; |
1921 m_Offset = 0; | 1918 m_Offset = 0; |
1922 m_dwLastObjNum = m_pDocument->GetLastObjNum(); | 1919 m_dwLastObjNum = m_pDocument->GetLastObjNum(); |
1923 m_ObjectOffset.Clear(); | 1920 m_ObjectOffset.Clear(); |
1924 m_NewObjNumArray.RemoveAll(); | 1921 m_NewObjNumArray.RemoveAll(); |
1925 InitID(); | 1922 InitID(); |
1926 if (flags & FPDFCREATE_PROGRESSIVE) | 1923 if (flags & FPDFCREATE_PROGRESSIVE) |
1927 return true; | 1924 return true; |
1928 return Continue(nullptr) > -1; | 1925 return Continue(nullptr) > -1; |
1929 } | 1926 } |
1930 | 1927 |
1931 void CPDF_Creator::InitID(FX_BOOL bDefault) { | 1928 void CPDF_Creator::InitID(FX_BOOL bDefault) { |
1932 CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : nullptr; | 1929 CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : nullptr; |
1933 FX_BOOL bNewId = !m_pIDArray; | 1930 FX_BOOL bNewId = !m_pIDArray; |
1934 if (!m_pIDArray) { | 1931 if (bNewId) { |
1935 m_pIDArray = new CPDF_Array; | 1932 m_pIDArray.reset(new CPDF_Array); |
1936 CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetObjectAt(0) : nullptr; | 1933 CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetObjectAt(0) : nullptr; |
1937 if (pID1) { | 1934 if (pID1) { |
1938 m_pIDArray->Add(pID1->Clone()); | 1935 m_pIDArray->Add(pID1->Clone()); |
1939 } else { | 1936 } else { |
1940 std::vector<uint8_t> buffer = | 1937 std::vector<uint8_t> buffer = |
1941 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum); | 1938 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum); |
1942 CFX_ByteString bsBuffer(buffer.data(), buffer.size()); | 1939 CFX_ByteString bsBuffer(buffer.data(), buffer.size()); |
1943 m_pIDArray->Add(new CPDF_String(bsBuffer, TRUE)); | 1940 m_pIDArray->Add(new CPDF_String(bsBuffer, TRUE)); |
1944 } | 1941 } |
1945 } | 1942 } |
(...skipping 12 matching lines...) Expand all Loading... |
1958 m_pIDArray->Add(new CPDF_String(bsBuffer, TRUE)); | 1955 m_pIDArray->Add(new CPDF_String(bsBuffer, TRUE)); |
1959 return; | 1956 return; |
1960 } | 1957 } |
1961 m_pIDArray->Add(m_pIDArray->GetObjectAt(0)->Clone()); | 1958 m_pIDArray->Add(m_pIDArray->GetObjectAt(0)->Clone()); |
1962 if (m_pEncryptDict && !pOldIDArray && m_pParser && bNewId) { | 1959 if (m_pEncryptDict && !pOldIDArray && m_pParser && bNewId) { |
1963 if (m_pEncryptDict->GetStringFor("Filter") == "Standard") { | 1960 if (m_pEncryptDict->GetStringFor("Filter") == "Standard") { |
1964 CFX_ByteString user_pass = m_pParser->GetPassword(); | 1961 CFX_ByteString user_pass = m_pParser->GetPassword(); |
1965 uint32_t flag = PDF_ENCRYPT_CONTENT; | 1962 uint32_t flag = PDF_ENCRYPT_CONTENT; |
1966 | 1963 |
1967 CPDF_SecurityHandler handler; | 1964 CPDF_SecurityHandler handler; |
1968 handler.OnCreate(m_pEncryptDict, m_pIDArray, user_pass.raw_str(), | 1965 handler.OnCreate(m_pEncryptDict, m_pIDArray.get(), user_pass.raw_str(), |
1969 user_pass.GetLength(), flag); | 1966 user_pass.GetLength(), flag); |
1970 if (m_bLocalCryptoHandler) | 1967 if (m_bLocalCryptoHandler) |
1971 delete m_pCryptoHandler; | 1968 delete m_pCryptoHandler; |
1972 m_pCryptoHandler = new CPDF_CryptoHandler; | 1969 m_pCryptoHandler = new CPDF_CryptoHandler; |
1973 m_pCryptoHandler->Init(m_pEncryptDict, &handler); | 1970 m_pCryptoHandler->Init(m_pEncryptDict, &handler); |
1974 m_bLocalCryptoHandler = TRUE; | 1971 m_bLocalCryptoHandler = TRUE; |
1975 m_bSecurityChanged = TRUE; | 1972 m_bSecurityChanged = TRUE; |
1976 } | 1973 } |
1977 } | 1974 } |
1978 } | 1975 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2016 m_pCryptoHandler = nullptr; | 2013 m_pCryptoHandler = nullptr; |
2017 } | 2014 } |
2018 void CPDF_Creator::ResetStandardSecurity() { | 2015 void CPDF_Creator::ResetStandardSecurity() { |
2019 if (!m_bLocalCryptoHandler) | 2016 if (!m_bLocalCryptoHandler) |
2020 return; | 2017 return; |
2021 | 2018 |
2022 delete m_pCryptoHandler; | 2019 delete m_pCryptoHandler; |
2023 m_pCryptoHandler = nullptr; | 2020 m_pCryptoHandler = nullptr; |
2024 m_bLocalCryptoHandler = FALSE; | 2021 m_bLocalCryptoHandler = FALSE; |
2025 } | 2022 } |
OLD | NEW |