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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 offset += len + 6; | 89 offset += len + 6; |
90 break; | 90 break; |
91 } | 91 } |
92 case CPDF_Object::ARRAY: { | 92 case CPDF_Object::ARRAY: { |
93 if (pFile->AppendString("[") < 0) { | 93 if (pFile->AppendString("[") < 0) { |
94 return -1; | 94 return -1; |
95 } | 95 } |
96 offset += 1; | 96 offset += 1; |
97 const CPDF_Array* p = pObj->AsArray(); | 97 const CPDF_Array* p = pObj->AsArray(); |
98 for (uint32_t i = 0; i < p->GetCount(); i++) { | 98 for (uint32_t i = 0; i < p->GetCount(); i++) { |
99 CPDF_Object* pElement = p->GetElement(i); | 99 CPDF_Object* pElement = p->GetObjectAt(i); |
100 if (pElement->GetObjNum()) { | 100 if (pElement->GetObjNum()) { |
101 if (pFile->AppendString(" ") < 0) { | 101 if (pFile->AppendString(" ") < 0) { |
102 return -1; | 102 return -1; |
103 } | 103 } |
104 if ((len = pFile->AppendDWord(pElement->GetObjNum())) < 0) { | 104 if ((len = pFile->AppendDWord(pElement->GetObjNum())) < 0) { |
105 return -1; | 105 return -1; |
106 } | 106 } |
107 if (pFile->AppendString(" 0 R") < 0) { | 107 if (pFile->AppendString(" 0 R") < 0) { |
108 return -1; | 108 return -1; |
109 } | 109 } |
(...skipping 1082 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1192 m_Offset += len + 5; | 1192 m_Offset += len + 5; |
1193 break; | 1193 break; |
1194 } | 1194 } |
1195 case CPDF_Object::ARRAY: { | 1195 case CPDF_Object::ARRAY: { |
1196 if (m_File.AppendString("[") < 0) { | 1196 if (m_File.AppendString("[") < 0) { |
1197 return -1; | 1197 return -1; |
1198 } | 1198 } |
1199 m_Offset += 1; | 1199 m_Offset += 1; |
1200 const CPDF_Array* p = pObj->AsArray(); | 1200 const CPDF_Array* p = pObj->AsArray(); |
1201 for (uint32_t i = 0; i < p->GetCount(); i++) { | 1201 for (uint32_t i = 0; i < p->GetCount(); i++) { |
1202 CPDF_Object* pElement = p->GetElement(i); | 1202 CPDF_Object* pElement = p->GetObjectAt(i); |
1203 if (pElement->GetObjNum()) { | 1203 if (pElement->GetObjNum()) { |
1204 if (m_File.AppendString(" ") < 0) { | 1204 if (m_File.AppendString(" ") < 0) { |
1205 return -1; | 1205 return -1; |
1206 } | 1206 } |
1207 if ((len = m_File.AppendDWord(pElement->GetObjNum())) < 0) { | 1207 if ((len = m_File.AppendDWord(pElement->GetObjNum())) < 0) { |
1208 return -1; | 1208 return -1; |
1209 } | 1209 } |
1210 if (m_File.AppendString(" 0 R") < 0) { | 1210 if (m_File.AppendString(" 0 R") < 0) { |
1211 return -1; | 1211 return -1; |
1212 } | 1212 } |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1486 int32_t CPDF_Creator::WriteDoc_Stage1(IFX_Pause* pPause) { | 1486 int32_t CPDF_Creator::WriteDoc_Stage1(IFX_Pause* pPause) { |
1487 FXSYS_assert(m_iStage > -1 || m_iStage < 20); | 1487 FXSYS_assert(m_iStage > -1 || m_iStage < 20); |
1488 if (m_iStage == 0) { | 1488 if (m_iStage == 0) { |
1489 if (!m_pParser) { | 1489 if (!m_pParser) { |
1490 m_dwFlags &= ~FPDFCREATE_INCREMENTAL; | 1490 m_dwFlags &= ~FPDFCREATE_INCREMENTAL; |
1491 } | 1491 } |
1492 if (m_bSecurityChanged && (m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0) { | 1492 if (m_bSecurityChanged && (m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0) { |
1493 m_dwFlags &= ~FPDFCREATE_INCREMENTAL; | 1493 m_dwFlags &= ~FPDFCREATE_INCREMENTAL; |
1494 } | 1494 } |
1495 CPDF_Dictionary* pDict = m_pDocument->GetRoot(); | 1495 CPDF_Dictionary* pDict = m_pDocument->GetRoot(); |
1496 m_pMetadata = pDict ? pDict->GetElementValue("Metadata") : NULL; | 1496 m_pMetadata = pDict ? pDict->GetDirectObjectBy("Metadata") : NULL; |
1497 if (m_dwFlags & FPDFCREATE_OBJECTSTREAM) { | 1497 if (m_dwFlags & FPDFCREATE_OBJECTSTREAM) { |
1498 m_pXRefStream = new CPDF_XRefStream; | 1498 m_pXRefStream = new CPDF_XRefStream; |
1499 m_pXRefStream->Start(); | 1499 m_pXRefStream->Start(); |
1500 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0 && m_pParser) { | 1500 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0 && m_pParser) { |
1501 FX_FILESIZE prev = m_pParser->GetLastXRefOffset(); | 1501 FX_FILESIZE prev = m_pParser->GetLastXRefOffset(); |
1502 m_pXRefStream->m_PrevOffset = prev; | 1502 m_pXRefStream->m_PrevOffset = prev; |
1503 } | 1503 } |
1504 } | 1504 } |
1505 m_iStage = 10; | 1505 m_iStage = 10; |
1506 } | 1506 } |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1972 if (flags & FPDFCREATE_PROGRESSIVE) { | 1972 if (flags & FPDFCREATE_PROGRESSIVE) { |
1973 return true; | 1973 return true; |
1974 } | 1974 } |
1975 return Continue(NULL) > -1; | 1975 return Continue(NULL) > -1; |
1976 } | 1976 } |
1977 void CPDF_Creator::InitID(FX_BOOL bDefault) { | 1977 void CPDF_Creator::InitID(FX_BOOL bDefault) { |
1978 CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : NULL; | 1978 CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : NULL; |
1979 FX_BOOL bNewId = !m_pIDArray; | 1979 FX_BOOL bNewId = !m_pIDArray; |
1980 if (!m_pIDArray) { | 1980 if (!m_pIDArray) { |
1981 m_pIDArray = new CPDF_Array; | 1981 m_pIDArray = new CPDF_Array; |
1982 CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetElement(0) : NULL; | 1982 CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetObjectAt(0) : NULL; |
1983 if (pID1) { | 1983 if (pID1) { |
1984 m_pIDArray->Add(pID1->Clone()); | 1984 m_pIDArray->Add(pID1->Clone()); |
1985 } else { | 1985 } else { |
1986 std::vector<uint8_t> buffer = | 1986 std::vector<uint8_t> buffer = |
1987 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum); | 1987 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum); |
1988 CFX_ByteStringC bsBuffer(buffer.data(), buffer.size()); | 1988 CFX_ByteStringC bsBuffer(buffer.data(), buffer.size()); |
1989 m_pIDArray->Add(new CPDF_String(bsBuffer, TRUE), m_pDocument); | 1989 m_pIDArray->Add(new CPDF_String(bsBuffer, TRUE), m_pDocument); |
1990 } | 1990 } |
1991 } | 1991 } |
1992 if (!bDefault) { | 1992 if (!bDefault) { |
1993 return; | 1993 return; |
1994 } | 1994 } |
1995 if (pOldIDArray) { | 1995 if (pOldIDArray) { |
1996 CPDF_Object* pID2 = pOldIDArray->GetElement(1); | 1996 CPDF_Object* pID2 = pOldIDArray->GetObjectAt(1); |
1997 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) && m_pEncryptDict && pID2) { | 1997 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) && m_pEncryptDict && pID2) { |
1998 m_pIDArray->Add(pID2->Clone()); | 1998 m_pIDArray->Add(pID2->Clone()); |
1999 return; | 1999 return; |
2000 } | 2000 } |
2001 std::vector<uint8_t> buffer = | 2001 std::vector<uint8_t> buffer = |
2002 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum); | 2002 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum); |
2003 CFX_ByteStringC bsBuffer(buffer.data(), buffer.size()); | 2003 CFX_ByteStringC bsBuffer(buffer.data(), buffer.size()); |
2004 m_pIDArray->Add(new CPDF_String(bsBuffer, TRUE), m_pDocument); | 2004 m_pIDArray->Add(new CPDF_String(bsBuffer, TRUE), m_pDocument); |
2005 return; | 2005 return; |
2006 } | 2006 } |
2007 m_pIDArray->Add(m_pIDArray->GetElement(0)->Clone()); | 2007 m_pIDArray->Add(m_pIDArray->GetObjectAt(0)->Clone()); |
2008 if (m_pEncryptDict && !pOldIDArray && m_pParser && bNewId) { | 2008 if (m_pEncryptDict && !pOldIDArray && m_pParser && bNewId) { |
2009 if (m_pEncryptDict->GetStringBy("Filter") == "Standard") { | 2009 if (m_pEncryptDict->GetStringBy("Filter") == "Standard") { |
2010 CPDF_StandardSecurityHandler handler; | 2010 CPDF_StandardSecurityHandler handler; |
2011 CFX_ByteString user_pass = m_pParser->GetPassword(); | 2011 CFX_ByteString user_pass = m_pParser->GetPassword(); |
2012 uint32_t flag = PDF_ENCRYPT_CONTENT; | 2012 uint32_t flag = PDF_ENCRYPT_CONTENT; |
2013 handler.OnCreate(m_pEncryptDict, m_pIDArray, (const uint8_t*)user_pass, | 2013 handler.OnCreate(m_pEncryptDict, m_pIDArray, (const uint8_t*)user_pass, |
2014 user_pass.GetLength(), flag); | 2014 user_pass.GetLength(), flag); |
2015 if (m_bNewCrypto) { | 2015 if (m_bNewCrypto) { |
2016 delete m_pCryptoHandler; | 2016 delete m_pCryptoHandler; |
2017 } | 2017 } |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2069 m_bNewCrypto = FALSE; | 2069 m_bNewCrypto = FALSE; |
2070 if (!m_bStandardSecurity) { | 2070 if (!m_bStandardSecurity) { |
2071 return; | 2071 return; |
2072 } | 2072 } |
2073 if (m_pEncryptDict) { | 2073 if (m_pEncryptDict) { |
2074 m_pEncryptDict->Release(); | 2074 m_pEncryptDict->Release(); |
2075 m_pEncryptDict = NULL; | 2075 m_pEncryptDict = NULL; |
2076 } | 2076 } |
2077 m_bStandardSecurity = FALSE; | 2077 m_bStandardSecurity = FALSE; |
2078 } | 2078 } |
OLD | NEW |