| 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 "../../../include/fpdfapi/fpdf_serial.h" | 7 #include "../../../include/fpdfapi/fpdf_serial.h" |
| 8 #include "editint.h" | 8 #include "editint.h" |
| 9 #define PDF_OBJECTSTREAM_MAXLENGTH (256 * 1024) | 9 #define PDF_OBJECTSTREAM_MAXLENGTH (256 * 1024) |
| 10 #define PDF_XREFSTREAM_MAXSIZE 10000 | 10 #define PDF_XREFSTREAM_MAXSIZE 10000 |
| 11 extern void FlateEncode(const uint8_t* src_buf, FX_DWORD src_data, FX_LPBYTE& de
st_buf, FX_DWORD& dest_size); | 11 extern void FlateEncode(const uint8_t* src_buf, FX_DWORD src_data, uint8_t*& des
t_buf, FX_DWORD& dest_size); |
| 12 extern void FlateEncode(FX_LPCBYTE src_buf, FX_DWORD src_size, int predictor, in
t Colors, int BitsPerComponent, int Columns, | 12 extern void FlateEncode(const uint8_t* src_buf, FX_DWORD src_size, int predictor
, int Colors, int BitsPerComponent, int Columns, |
| 13 FX_LPBYTE& dest_buf, FX_DWORD& dest_size); | 13 uint8_t*& dest_buf, FX_DWORD& dest_size); |
| 14 extern FX_BOOL IsSignatureDict(const CPDF_Dictionary* pDict); | 14 extern FX_BOOL IsSignatureDict(const CPDF_Dictionary* pDict); |
| 15 int32_t PDF_CreatorAppendObject(const CPDF_Object* pObj, CFX_FileBufferArchive *
pFile, FX_FILESIZE& offset) | 15 int32_t PDF_CreatorAppendObject(const CPDF_Object* pObj, CFX_FileBufferArchive *
pFile, FX_FILESIZE& offset) |
| 16 { | 16 { |
| 17 int32_t len = 0; | 17 int32_t len = 0; |
| 18 if (pObj == NULL) { | 18 if (pObj == NULL) { |
| 19 if (pFile->AppendString(FX_BSTRC(" null")) < 0) { | 19 if (pFile->AppendString(FX_BSTRC(" null")) < 0) { |
| 20 return -1; | 20 return -1; |
| 21 } | 21 } |
| 22 offset += 5; | 22 offset += 5; |
| 23 return 1; | 23 return 1; |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 } | 276 } |
| 277 if ((len = pFile->AppendDWord(dwObjNum)) < 0) { | 277 if ((len = pFile->AppendDWord(dwObjNum)) < 0) { |
| 278 return -1; | 278 return -1; |
| 279 } | 279 } |
| 280 if (pFile->AppendString(FX_BSTRC(" 0 R ")) < 0) { | 280 if (pFile->AppendString(FX_BSTRC(" 0 R ")) < 0) { |
| 281 return -1; | 281 return -1; |
| 282 } | 282 } |
| 283 offset += len + 6; | 283 offset += len + 6; |
| 284 return offset; | 284 return offset; |
| 285 } | 285 } |
| 286 FX_BOOL PDF_GenerateFileID(FX_DWORD dwSeed1, FX_DWORD dwSeed2, FX_LPDWORD pBuffe
r) | 286 FX_BOOL PDF_GenerateFileID(FX_DWORD dwSeed1, FX_DWORD dwSeed2, FX_DWORD* pBuffer
) |
| 287 { | 287 { |
| 288 if (!pBuffer) { | 288 if (!pBuffer) { |
| 289 return FALSE; | 289 return FALSE; |
| 290 } | 290 } |
| 291 FX_LPVOID pContext = FX_Random_MT_Start(dwSeed1); | 291 void* pContext = FX_Random_MT_Start(dwSeed1); |
| 292 int32_t i = 0; | 292 int32_t i = 0; |
| 293 for (i = 0; i < 2; i++) { | 293 for (i = 0; i < 2; i++) { |
| 294 *pBuffer++ = FX_Random_MT_Generate(pContext); | 294 *pBuffer++ = FX_Random_MT_Generate(pContext); |
| 295 } | 295 } |
| 296 FX_Random_MT_Close(pContext); | 296 FX_Random_MT_Close(pContext); |
| 297 pContext = FX_Random_MT_Start(dwSeed2); | 297 pContext = FX_Random_MT_Start(dwSeed2); |
| 298 for (i = 0; i < 2; i++) { | 298 for (i = 0; i < 2; i++) { |
| 299 *pBuffer++ = FX_Random_MT_Generate(pContext); | 299 *pBuffer++ = FX_Random_MT_Generate(pContext); |
| 300 } | 300 } |
| 301 FX_Random_MT_Close(pContext); | 301 FX_Random_MT_Close(pContext); |
| 302 return TRUE; | 302 return TRUE; |
| 303 } | 303 } |
| 304 class CPDF_FlateEncoder | 304 class CPDF_FlateEncoder |
| 305 { | 305 { |
| 306 public: | 306 public: |
| 307 CPDF_FlateEncoder(); | 307 CPDF_FlateEncoder(); |
| 308 ~CPDF_FlateEncoder(); | 308 ~CPDF_FlateEncoder(); |
| 309 FX_BOOL Initialize(CPDF_Stream* pStream, FX_BOOL bFlateEncode); | 309 FX_BOOL Initialize(CPDF_Stream* pStream, FX_BOOL bFlateEncode); |
| 310 FX_BOOL» » Initialize(FX_LPCBYTE pBuffer, FX_DWORD size, FX_BOOL bF
lateEncode, FX_BOOL bXRefStream = FALSE); | 310 FX_BOOL» » Initialize(const uint8_t* pBuffer, FX_DWORD size, FX_BOO
L bFlateEncode, FX_BOOL bXRefStream = FALSE); |
| 311 void CloneDict(); | 311 void CloneDict(); |
| 312 FX_LPBYTE» » » m_pData; | 312 uint8_t*» » » m_pData; |
| 313 FX_DWORD m_dwSize; | 313 FX_DWORD m_dwSize; |
| 314 CPDF_Dictionary* m_pDict; | 314 CPDF_Dictionary* m_pDict; |
| 315 FX_BOOL m_bCloned; | 315 FX_BOOL m_bCloned; |
| 316 FX_BOOL m_bNewData; | 316 FX_BOOL m_bNewData; |
| 317 CPDF_StreamAcc m_Acc; | 317 CPDF_StreamAcc m_Acc; |
| 318 }; | 318 }; |
| 319 CPDF_FlateEncoder::CPDF_FlateEncoder() | 319 CPDF_FlateEncoder::CPDF_FlateEncoder() |
| 320 { | 320 { |
| 321 m_pData = NULL; | 321 m_pData = NULL; |
| 322 m_dwSize = 0; | 322 m_dwSize = 0; |
| 323 m_pDict = NULL; | 323 m_pDict = NULL; |
| 324 m_bCloned = FALSE; | 324 m_bCloned = FALSE; |
| 325 m_bNewData = FALSE; | 325 m_bNewData = FALSE; |
| 326 } | 326 } |
| 327 void CPDF_FlateEncoder::CloneDict() | 327 void CPDF_FlateEncoder::CloneDict() |
| 328 { | 328 { |
| 329 if (!m_bCloned) { | 329 if (!m_bCloned) { |
| 330 m_pDict = (CPDF_Dictionary*)m_pDict->Clone(); | 330 m_pDict = (CPDF_Dictionary*)m_pDict->Clone(); |
| 331 m_bCloned = TRUE; | 331 m_bCloned = TRUE; |
| 332 } | 332 } |
| 333 } | 333 } |
| 334 FX_BOOL CPDF_FlateEncoder::Initialize(CPDF_Stream* pStream, FX_BOOL bFlateEncode
) | 334 FX_BOOL CPDF_FlateEncoder::Initialize(CPDF_Stream* pStream, FX_BOOL bFlateEncode
) |
| 335 { | 335 { |
| 336 m_Acc.LoadAllData(pStream, TRUE); | 336 m_Acc.LoadAllData(pStream, TRUE); |
| 337 if ((pStream && pStream->GetDict() && pStream->GetDict()->KeyExist("Filter")
) || !bFlateEncode) { | 337 if ((pStream && pStream->GetDict() && pStream->GetDict()->KeyExist("Filter")
) || !bFlateEncode) { |
| 338 if (pStream->GetDict()->KeyExist("Filter") && !bFlateEncode) { | 338 if (pStream->GetDict()->KeyExist("Filter") && !bFlateEncode) { |
| 339 CPDF_StreamAcc destAcc; | 339 CPDF_StreamAcc destAcc; |
| 340 destAcc.LoadAllData(pStream); | 340 destAcc.LoadAllData(pStream); |
| 341 m_dwSize = destAcc.GetSize(); | 341 m_dwSize = destAcc.GetSize(); |
| 342 m_pData = (FX_LPBYTE)destAcc.DetachData(); | 342 m_pData = (uint8_t*)destAcc.DetachData(); |
| 343 m_pDict = (CPDF_Dictionary*)pStream->GetDict()->Clone(); | 343 m_pDict = (CPDF_Dictionary*)pStream->GetDict()->Clone(); |
| 344 m_pDict->RemoveAt(FX_BSTRC("Filter")); | 344 m_pDict->RemoveAt(FX_BSTRC("Filter")); |
| 345 m_bNewData = TRUE; | 345 m_bNewData = TRUE; |
| 346 m_bCloned = TRUE; | 346 m_bCloned = TRUE; |
| 347 } else { | 347 } else { |
| 348 m_pData = (FX_LPBYTE)m_Acc.GetData(); | 348 m_pData = (uint8_t*)m_Acc.GetData(); |
| 349 m_dwSize = m_Acc.GetSize(); | 349 m_dwSize = m_Acc.GetSize(); |
| 350 m_pDict = pStream->GetDict(); | 350 m_pDict = pStream->GetDict(); |
| 351 } | 351 } |
| 352 return TRUE; | 352 return TRUE; |
| 353 } | 353 } |
| 354 m_pData = NULL; | 354 m_pData = NULL; |
| 355 m_dwSize = 0; | 355 m_dwSize = 0; |
| 356 m_bNewData = TRUE; | 356 m_bNewData = TRUE; |
| 357 m_bCloned = TRUE; | 357 m_bCloned = TRUE; |
| 358 ::FlateEncode(m_Acc.GetData(), m_Acc.GetSize(), m_pData, m_dwSize); | 358 ::FlateEncode(m_Acc.GetData(), m_Acc.GetSize(), m_pData, m_dwSize); |
| 359 m_pDict = (CPDF_Dictionary*)pStream->GetDict()->Clone(); | 359 m_pDict = (CPDF_Dictionary*)pStream->GetDict()->Clone(); |
| 360 m_pDict->SetAtInteger("Length", m_dwSize); | 360 m_pDict->SetAtInteger("Length", m_dwSize); |
| 361 m_pDict->SetAtName("Filter", "FlateDecode"); | 361 m_pDict->SetAtName("Filter", "FlateDecode"); |
| 362 m_pDict->RemoveAt("DecodeParms"); | 362 m_pDict->RemoveAt("DecodeParms"); |
| 363 return TRUE; | 363 return TRUE; |
| 364 } | 364 } |
| 365 FX_BOOL CPDF_FlateEncoder::Initialize(FX_LPCBYTE pBuffer, FX_DWORD size, FX_BOOL
bFlateEncode, FX_BOOL bXRefStream) | 365 FX_BOOL CPDF_FlateEncoder::Initialize(const uint8_t* pBuffer, FX_DWORD size, FX_
BOOL bFlateEncode, FX_BOOL bXRefStream) |
| 366 { | 366 { |
| 367 if (!bFlateEncode) { | 367 if (!bFlateEncode) { |
| 368 m_pData = (FX_LPBYTE)pBuffer; | 368 m_pData = (uint8_t*)pBuffer; |
| 369 m_dwSize = size; | 369 m_dwSize = size; |
| 370 return TRUE; | 370 return TRUE; |
| 371 } | 371 } |
| 372 m_bNewData = TRUE; | 372 m_bNewData = TRUE; |
| 373 if (bXRefStream) { | 373 if (bXRefStream) { |
| 374 ::FlateEncode(pBuffer, size, 12, 1, 8, 7, m_pData, m_dwSize); | 374 ::FlateEncode(pBuffer, size, 12, 1, 8, 7, m_pData, m_dwSize); |
| 375 } else { | 375 } else { |
| 376 ::FlateEncode(pBuffer, size, m_pData, m_dwSize); | 376 ::FlateEncode(pBuffer, size, m_pData, m_dwSize); |
| 377 } | 377 } |
| 378 return TRUE; | 378 return TRUE; |
| 379 } | 379 } |
| 380 CPDF_FlateEncoder::~CPDF_FlateEncoder() | 380 CPDF_FlateEncoder::~CPDF_FlateEncoder() |
| 381 { | 381 { |
| 382 if (m_bCloned && m_pDict) { | 382 if (m_bCloned && m_pDict) { |
| 383 m_pDict->Release(); | 383 m_pDict->Release(); |
| 384 } | 384 } |
| 385 if (m_bNewData && m_pData) { | 385 if (m_bNewData && m_pData) { |
| 386 FX_Free(m_pData); | 386 FX_Free(m_pData); |
| 387 } | 387 } |
| 388 } | 388 } |
| 389 class CPDF_Encryptor | 389 class CPDF_Encryptor |
| 390 { | 390 { |
| 391 public: | 391 public: |
| 392 CPDF_Encryptor(); | 392 CPDF_Encryptor(); |
| 393 ~CPDF_Encryptor(); | 393 ~CPDF_Encryptor(); |
| 394 FX_BOOL» » Initialize(CPDF_CryptoHandler* pHandler, int objnum, FX_
LPBYTE src_data, FX_DWORD src_size); | 394 FX_BOOL» » Initialize(CPDF_CryptoHandler* pHandler, int objnum, uin
t8_t* src_data, FX_DWORD src_size); |
| 395 FX_LPBYTE» » » m_pData; | 395 uint8_t*» » » m_pData; |
| 396 FX_DWORD m_dwSize; | 396 FX_DWORD m_dwSize; |
| 397 FX_BOOL m_bNewBuf; | 397 FX_BOOL m_bNewBuf; |
| 398 }; | 398 }; |
| 399 CPDF_Encryptor::CPDF_Encryptor() | 399 CPDF_Encryptor::CPDF_Encryptor() |
| 400 { | 400 { |
| 401 m_pData = NULL; | 401 m_pData = NULL; |
| 402 m_dwSize = 0; | 402 m_dwSize = 0; |
| 403 m_bNewBuf = FALSE; | 403 m_bNewBuf = FALSE; |
| 404 } | 404 } |
| 405 FX_BOOL CPDF_Encryptor::Initialize(CPDF_CryptoHandler* pHandler, int objnum, FX_
LPBYTE src_data, FX_DWORD src_size) | 405 FX_BOOL CPDF_Encryptor::Initialize(CPDF_CryptoHandler* pHandler, int objnum, uin
t8_t* src_data, FX_DWORD src_size) |
| 406 { | 406 { |
| 407 if (src_size == 0) { | 407 if (src_size == 0) { |
| 408 return TRUE; | 408 return TRUE; |
| 409 } | 409 } |
| 410 if (pHandler == NULL) { | 410 if (pHandler == NULL) { |
| 411 m_pData = (FX_LPBYTE)src_data; | 411 m_pData = (uint8_t*)src_data; |
| 412 m_dwSize = src_size; | 412 m_dwSize = src_size; |
| 413 m_bNewBuf = FALSE; | 413 m_bNewBuf = FALSE; |
| 414 return TRUE; | 414 return TRUE; |
| 415 } | 415 } |
| 416 m_dwSize = pHandler->EncryptGetSize(objnum, 0, src_data, src_size); | 416 m_dwSize = pHandler->EncryptGetSize(objnum, 0, src_data, src_size); |
| 417 m_pData = FX_Alloc(uint8_t, m_dwSize); | 417 m_pData = FX_Alloc(uint8_t, m_dwSize); |
| 418 pHandler->EncryptContent(objnum, 0, src_data, src_size, m_pData, m_dwSize); | 418 pHandler->EncryptContent(objnum, 0, src_data, src_size, m_pData, m_dwSize); |
| 419 m_bNewBuf = TRUE; | 419 m_bNewBuf = TRUE; |
| 420 return TRUE; | 420 return TRUE; |
| 421 } | 421 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 439 m_index = 0; | 439 m_index = 0; |
| 440 return TRUE; | 440 return TRUE; |
| 441 } | 441 } |
| 442 int32_t CPDF_ObjectStream::CompressIndirectObject(FX_DWORD dwObjNum, const CPDF_
Object *pObj) | 442 int32_t CPDF_ObjectStream::CompressIndirectObject(FX_DWORD dwObjNum, const CPDF_
Object *pObj) |
| 443 { | 443 { |
| 444 m_ObjNumArray.Add(dwObjNum); | 444 m_ObjNumArray.Add(dwObjNum); |
| 445 m_OffsetArray.Add(m_Buffer.GetLength()); | 445 m_OffsetArray.Add(m_Buffer.GetLength()); |
| 446 m_Buffer << pObj; | 446 m_Buffer << pObj; |
| 447 return 1; | 447 return 1; |
| 448 } | 448 } |
| 449 int32_t CPDF_ObjectStream::CompressIndirectObject(FX_DWORD dwObjNum, FX_LPCBYTE
pBuffer, FX_DWORD dwSize) | 449 int32_t CPDF_ObjectStream::CompressIndirectObject(FX_DWORD dwObjNum, const uint8
_t* pBuffer, FX_DWORD dwSize) |
| 450 { | 450 { |
| 451 m_ObjNumArray.Add(dwObjNum); | 451 m_ObjNumArray.Add(dwObjNum); |
| 452 m_OffsetArray.Add(m_Buffer.GetLength()); | 452 m_OffsetArray.Add(m_Buffer.GetLength()); |
| 453 m_Buffer.AppendBlock(pBuffer, dwSize); | 453 m_Buffer.AppendBlock(pBuffer, dwSize); |
| 454 return 1; | 454 return 1; |
| 455 } | 455 } |
| 456 FX_FILESIZE CPDF_ObjectStream::End(CPDF_Creator* pCreator) | 456 FX_FILESIZE CPDF_ObjectStream::End(CPDF_Creator* pCreator) |
| 457 { | 457 { |
| 458 FXSYS_assert(pCreator); | 458 FXSYS_assert(pCreator); |
| 459 if (m_ObjNumArray.GetSize() == 0) { | 459 if (m_ObjNumArray.GetSize() == 0) { |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 if (!pCreator) { | 557 if (!pCreator) { |
| 558 return 0; | 558 return 0; |
| 559 } | 559 } |
| 560 m_ObjStream.CompressIndirectObject(dwObjNum, pObj); | 560 m_ObjStream.CompressIndirectObject(dwObjNum, pObj); |
| 561 if (m_ObjStream.m_ObjNumArray.GetSize() < pCreator->m_ObjectStreamSize && | 561 if (m_ObjStream.m_ObjNumArray.GetSize() < pCreator->m_ObjectStreamSize && |
| 562 m_ObjStream.m_Buffer.GetLength() < PDF_OBJECTSTREAM_MAXLENGTH) { | 562 m_ObjStream.m_Buffer.GetLength() < PDF_OBJECTSTREAM_MAXLENGTH) { |
| 563 return 1; | 563 return 1; |
| 564 } | 564 } |
| 565 return EndObjectStream(pCreator); | 565 return EndObjectStream(pCreator); |
| 566 } | 566 } |
| 567 int32_t CPDF_XRefStream::CompressIndirectObject(FX_DWORD dwObjNum, FX_LPCBYTE pB
uffer, FX_DWORD dwSize, CPDF_Creator *pCreator) | 567 int32_t CPDF_XRefStream::CompressIndirectObject(FX_DWORD dwObjNum, const uint8_t
* pBuffer, FX_DWORD dwSize, CPDF_Creator *pCreator) |
| 568 { | 568 { |
| 569 if (!pCreator) { | 569 if (!pCreator) { |
| 570 return 0; | 570 return 0; |
| 571 } | 571 } |
| 572 m_ObjStream.CompressIndirectObject(dwObjNum, pBuffer, dwSize); | 572 m_ObjStream.CompressIndirectObject(dwObjNum, pBuffer, dwSize); |
| 573 if (m_ObjStream.m_ObjNumArray.GetSize() < pCreator->m_ObjectStreamSize && | 573 if (m_ObjStream.m_ObjNumArray.GetSize() < pCreator->m_ObjectStreamSize && |
| 574 m_ObjStream.m_Buffer.GetLength() < PDF_OBJECTSTREAM_MAXLENGTH) { | 574 m_ObjStream.m_Buffer.GetLength() < PDF_OBJECTSTREAM_MAXLENGTH) { |
| 575 return 1; | 575 return 1; |
| 576 } | 576 } |
| 577 return EndObjectStream(pCreator); | 577 return EndObjectStream(pCreator); |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 951 return 0; | 951 return 0; |
| 952 } | 952 } |
| 953 if (!m_pXRefStream->End(this)) { | 953 if (!m_pXRefStream->End(this)) { |
| 954 return -1; | 954 return -1; |
| 955 } | 955 } |
| 956 if (!m_pXRefStream->Start()) { | 956 if (!m_pXRefStream->Start()) { |
| 957 return -1; | 957 return -1; |
| 958 } | 958 } |
| 959 return 0; | 959 return 0; |
| 960 } | 960 } |
| 961 int32_t CPDF_Creator::WriteIndirectObjectToStream(FX_DWORD objnum, FX_LPCBYTE pB
uffer, FX_DWORD dwSize) | 961 int32_t CPDF_Creator::WriteIndirectObjectToStream(FX_DWORD objnum, const uint8_t
* pBuffer, FX_DWORD dwSize) |
| 962 { | 962 { |
| 963 if (!m_pXRefStream) { | 963 if (!m_pXRefStream) { |
| 964 return 1; | 964 return 1; |
| 965 } | 965 } |
| 966 m_pXRefStream->AddObjectNumberToIndexArray(objnum); | 966 m_pXRefStream->AddObjectNumberToIndexArray(objnum); |
| 967 int32_t iRet = m_pXRefStream->CompressIndirectObject(objnum, pBuffer, dwSize
, this); | 967 int32_t iRet = m_pXRefStream->CompressIndirectObject(objnum, pBuffer, dwSize
, this); |
| 968 if (iRet < 1) { | 968 if (iRet < 1) { |
| 969 return iRet; | 969 return iRet; |
| 970 } | 970 } |
| 971 if (!_IsXRefNeedEnd(m_pXRefStream, m_dwFlags)) { | 971 if (!_IsXRefNeedEnd(m_pXRefStream, m_dwFlags)) { |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1097 FX_BOOL bHex = ((CPDF_String*)pObj)->IsHex(); | 1097 FX_BOOL bHex = ((CPDF_String*)pObj)->IsHex(); |
| 1098 if (m_pCryptoHandler == NULL || !bEncrypt) { | 1098 if (m_pCryptoHandler == NULL || !bEncrypt) { |
| 1099 CFX_ByteString content = PDF_EncodeString(str, bHex); | 1099 CFX_ByteString content = PDF_EncodeString(str, bHex); |
| 1100 if ((len = m_File.AppendString(content)) < 0) { | 1100 if ((len = m_File.AppendString(content)) < 0) { |
| 1101 return -1; | 1101 return -1; |
| 1102 } | 1102 } |
| 1103 m_Offset += len; | 1103 m_Offset += len; |
| 1104 break; | 1104 break; |
| 1105 } | 1105 } |
| 1106 CPDF_Encryptor encryptor; | 1106 CPDF_Encryptor encryptor; |
| 1107 encryptor.Initialize(m_pCryptoHandler, objnum, (FX_LPBYTE)str.c_
str(), str.GetLength()); | 1107 encryptor.Initialize(m_pCryptoHandler, objnum, (uint8_t*)str.c_s
tr(), str.GetLength()); |
| 1108 CFX_ByteString content = PDF_EncodeString(CFX_ByteString((FX_LPC
STR)encryptor.m_pData, encryptor.m_dwSize), bHex); | 1108 CFX_ByteString content = PDF_EncodeString(CFX_ByteString((const
FX_CHAR*)encryptor.m_pData, encryptor.m_dwSize), bHex); |
| 1109 if ((len = m_File.AppendString(content)) < 0) { | 1109 if ((len = m_File.AppendString(content)) < 0) { |
| 1110 return -1; | 1110 return -1; |
| 1111 } | 1111 } |
| 1112 m_Offset += len; | 1112 m_Offset += len; |
| 1113 break; | 1113 break; |
| 1114 } | 1114 } |
| 1115 case PDFOBJ_STREAM: { | 1115 case PDFOBJ_STREAM: { |
| 1116 CPDF_FlateEncoder encoder; | 1116 CPDF_FlateEncoder encoder; |
| 1117 encoder.Initialize((CPDF_Stream*)pObj, m_bCompress); | 1117 encoder.Initialize((CPDF_Stream*)pObj, m_bCompress); |
| 1118 CPDF_Encryptor encryptor; | 1118 CPDF_Encryptor encryptor; |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1245 } | 1245 } |
| 1246 } | 1246 } |
| 1247 return 1; | 1247 return 1; |
| 1248 } | 1248 } |
| 1249 int32_t CPDF_Creator::WriteOldIndirectObject(FX_DWORD objnum) | 1249 int32_t CPDF_Creator::WriteOldIndirectObject(FX_DWORD objnum) |
| 1250 { | 1250 { |
| 1251 if(m_pParser->m_V5Type[objnum] == 0 || m_pParser->m_V5Type[objnum] == 255) { | 1251 if(m_pParser->m_V5Type[objnum] == 0 || m_pParser->m_V5Type[objnum] == 255) { |
| 1252 return 0; | 1252 return 0; |
| 1253 } | 1253 } |
| 1254 m_ObjectOffset[objnum] = m_Offset; | 1254 m_ObjectOffset[objnum] = m_Offset; |
| 1255 FX_LPVOID valuetemp = NULL; | 1255 void* valuetemp = NULL; |
| 1256 FX_BOOL bExistInMap = m_pDocument->m_IndirectObjs.Lookup((FX_LPVOID)(uintptr
_t)objnum, valuetemp); | 1256 FX_BOOL bExistInMap = m_pDocument->m_IndirectObjs.Lookup((void*)(uintptr_t)o
bjnum, valuetemp); |
| 1257 FX_BOOL bObjStm = (m_pParser->m_V5Type[objnum] == 2) && m_pEncryptDict && !m
_pXRefStream; | 1257 FX_BOOL bObjStm = (m_pParser->m_V5Type[objnum] == 2) && m_pEncryptDict && !m
_pXRefStream; |
| 1258 if(m_pParser->m_bVersionUpdated || m_bSecurityChanged || bExistInMap || bObj
Stm) { | 1258 if(m_pParser->m_bVersionUpdated || m_bSecurityChanged || bExistInMap || bObj
Stm) { |
| 1259 CPDF_Object* pObj = m_pDocument->GetIndirectObject(objnum); | 1259 CPDF_Object* pObj = m_pDocument->GetIndirectObject(objnum); |
| 1260 if (pObj == NULL) { | 1260 if (pObj == NULL) { |
| 1261 m_ObjectOffset[objnum] = 0; | 1261 m_ObjectOffset[objnum] = 0; |
| 1262 m_ObjectSize[objnum] = 0; | 1262 m_ObjectSize[objnum] = 0; |
| 1263 return 0; | 1263 return 0; |
| 1264 } | 1264 } |
| 1265 if (WriteIndirectObj(pObj)) { | 1265 if (WriteIndirectObj(pObj)) { |
| 1266 return -1; | 1266 return -1; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1319 for(; objnum < nOldSize; objnum ++) { | 1319 for(; objnum < nOldSize; objnum ++) { |
| 1320 int32_t iRet = WriteOldIndirectObject(objnum); | 1320 int32_t iRet = WriteOldIndirectObject(objnum); |
| 1321 if (!iRet) { | 1321 if (!iRet) { |
| 1322 continue; | 1322 continue; |
| 1323 } | 1323 } |
| 1324 if (iRet < 0) { | 1324 if (iRet < 0) { |
| 1325 return iRet; | 1325 return iRet; |
| 1326 } | 1326 } |
| 1327 m_ObjectSize[objnum] = (FX_DWORD)(m_Offset - m_ObjectOffset[objnum]); | 1327 m_ObjectSize[objnum] = (FX_DWORD)(m_Offset - m_ObjectOffset[objnum]); |
| 1328 if (pPause && pPause->NeedToPauseNow()) { | 1328 if (pPause && pPause->NeedToPauseNow()) { |
| 1329 m_Pos = (FX_LPVOID)(uintptr_t)(objnum + 1); | 1329 m_Pos = (void*)(uintptr_t)(objnum + 1); |
| 1330 return 1; | 1330 return 1; |
| 1331 } | 1331 } |
| 1332 } | 1332 } |
| 1333 return 0; | 1333 return 0; |
| 1334 } | 1334 } |
| 1335 int32_t CPDF_Creator::WriteNewObjs(FX_BOOL bIncremental, IFX_Pause *pPause) | 1335 int32_t CPDF_Creator::WriteNewObjs(FX_BOOL bIncremental, IFX_Pause *pPause) |
| 1336 { | 1336 { |
| 1337 int32_t iCount = m_NewObjNumArray.GetSize(); | 1337 int32_t iCount = m_NewObjNumArray.GetSize(); |
| 1338 int32_t index = (int32_t)(uintptr_t)m_Pos; | 1338 int32_t index = (int32_t)(uintptr_t)m_Pos; |
| 1339 while (index < iCount) { | 1339 while (index < iCount) { |
| 1340 FX_DWORD objnum = m_NewObjNumArray.ElementAt(index); | 1340 FX_DWORD objnum = m_NewObjNumArray.ElementAt(index); |
| 1341 CPDF_Object *pObj = NULL; | 1341 CPDF_Object *pObj = NULL; |
| 1342 m_pDocument->m_IndirectObjs.Lookup((FX_LPVOID)(uintptr_t)objnum, (FX_LPV
OID&)pObj); | 1342 m_pDocument->m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, (void*&)pOb
j); |
| 1343 if (NULL == pObj) { | 1343 if (NULL == pObj) { |
| 1344 ++index; | 1344 ++index; |
| 1345 continue; | 1345 continue; |
| 1346 } | 1346 } |
| 1347 m_ObjectOffset[objnum] = m_Offset; | 1347 m_ObjectOffset[objnum] = m_Offset; |
| 1348 if (WriteIndirectObj(pObj)) { | 1348 if (WriteIndirectObj(pObj)) { |
| 1349 return -1; | 1349 return -1; |
| 1350 } | 1350 } |
| 1351 m_ObjectSize[objnum] = (FX_DWORD)(m_Offset - m_ObjectOffset[objnum]); | 1351 m_ObjectSize[objnum] = (FX_DWORD)(m_Offset - m_ObjectOffset[objnum]); |
| 1352 index++; | 1352 index++; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1383 } | 1383 } |
| 1384 void CPDF_Creator::InitNewObjNumOffsets() | 1384 void CPDF_Creator::InitNewObjNumOffsets() |
| 1385 { | 1385 { |
| 1386 FX_BOOL bIncremental = (m_dwFlags & FPDFCREATE_INCREMENTAL) != 0; | 1386 FX_BOOL bIncremental = (m_dwFlags & FPDFCREATE_INCREMENTAL) != 0; |
| 1387 FX_BOOL bNoOriginal = (m_dwFlags & FPDFCREATE_NO_ORIGINAL) != 0; | 1387 FX_BOOL bNoOriginal = (m_dwFlags & FPDFCREATE_NO_ORIGINAL) != 0; |
| 1388 FX_DWORD nOldSize = m_pParser ? m_pParser->m_CrossRef.GetSize() : 0; | 1388 FX_DWORD nOldSize = m_pParser ? m_pParser->m_CrossRef.GetSize() : 0; |
| 1389 FX_POSITION pos = m_pDocument->m_IndirectObjs.GetStartPosition(); | 1389 FX_POSITION pos = m_pDocument->m_IndirectObjs.GetStartPosition(); |
| 1390 while (pos) { | 1390 while (pos) { |
| 1391 size_t key = 0; | 1391 size_t key = 0; |
| 1392 CPDF_Object* pObj; | 1392 CPDF_Object* pObj; |
| 1393 m_pDocument->m_IndirectObjs.GetNextAssoc(pos, (FX_LPVOID&)key, (FX_LPVOI
D&)pObj); | 1393 m_pDocument->m_IndirectObjs.GetNextAssoc(pos, (void*&)key, (void*&)pObj)
; |
| 1394 FX_DWORD objnum = (FX_DWORD)key; | 1394 FX_DWORD objnum = (FX_DWORD)key; |
| 1395 if (pObj->GetObjNum() == -1) { | 1395 if (pObj->GetObjNum() == -1) { |
| 1396 continue; | 1396 continue; |
| 1397 } | 1397 } |
| 1398 if (bIncremental) { | 1398 if (bIncremental) { |
| 1399 if (!pObj->IsModified()) { | 1399 if (!pObj->IsModified()) { |
| 1400 continue; | 1400 continue; |
| 1401 } | 1401 } |
| 1402 } else { | 1402 } else { |
| 1403 if (objnum < nOldSize && m_pParser->m_V5Type[objnum] != 0) { | 1403 if (objnum < nOldSize && m_pParser->m_V5Type[objnum] != 0) { |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1510 m_Offset += len; | 1510 m_Offset += len; |
| 1511 if ((len = m_File.AppendString(FX_BSTRC("\r\n%\xA1\xB3\xC5\xD7\r\n")
)) < 0) { | 1511 if ((len = m_File.AppendString(FX_BSTRC("\r\n%\xA1\xB3\xC5\xD7\r\n")
)) < 0) { |
| 1512 return -1; | 1512 return -1; |
| 1513 } | 1513 } |
| 1514 m_Offset += len; | 1514 m_Offset += len; |
| 1515 InitOldObjNumOffsets(); | 1515 InitOldObjNumOffsets(); |
| 1516 m_iStage = 20; | 1516 m_iStage = 20; |
| 1517 } else { | 1517 } else { |
| 1518 IFX_FileRead* pSrcFile = m_pParser->GetFileAccess(); | 1518 IFX_FileRead* pSrcFile = m_pParser->GetFileAccess(); |
| 1519 m_Offset = pSrcFile->GetSize(); | 1519 m_Offset = pSrcFile->GetSize(); |
| 1520 m_Pos = (FX_LPVOID)(uintptr_t)m_Offset; | 1520 m_Pos = (void*)(uintptr_t)m_Offset; |
| 1521 m_iStage = 15; | 1521 m_iStage = 15; |
| 1522 } | 1522 } |
| 1523 } | 1523 } |
| 1524 if (m_iStage == 15) { | 1524 if (m_iStage == 15) { |
| 1525 if ((m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0 && m_Pos) { | 1525 if ((m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0 && m_Pos) { |
| 1526 IFX_FileRead* pSrcFile = m_pParser->GetFileAccess(); | 1526 IFX_FileRead* pSrcFile = m_pParser->GetFileAccess(); |
| 1527 uint8_t buffer[4096]; | 1527 uint8_t buffer[4096]; |
| 1528 FX_DWORD src_size = (FX_DWORD)(uintptr_t)m_Pos; | 1528 FX_DWORD src_size = (FX_DWORD)(uintptr_t)m_Pos; |
| 1529 while (src_size) { | 1529 while (src_size) { |
| 1530 FX_DWORD block_size = src_size > 4096 ? 4096 : src_size; | 1530 FX_DWORD block_size = src_size > 4096 ? 4096 : src_size; |
| 1531 if (!pSrcFile->ReadBlock(buffer, m_Offset - src_size, block_size
)) { | 1531 if (!pSrcFile->ReadBlock(buffer, m_Offset - src_size, block_size
)) { |
| 1532 return -1; | 1532 return -1; |
| 1533 } | 1533 } |
| 1534 if (m_File.AppendBlock(buffer, block_size) < 0) { | 1534 if (m_File.AppendBlock(buffer, block_size) < 0) { |
| 1535 return -1; | 1535 return -1; |
| 1536 } | 1536 } |
| 1537 src_size -= block_size; | 1537 src_size -= block_size; |
| 1538 if (pPause && pPause->NeedToPauseNow()) { | 1538 if (pPause && pPause->NeedToPauseNow()) { |
| 1539 m_Pos = (FX_LPVOID)(uintptr_t)src_size; | 1539 m_Pos = (void*)(uintptr_t)src_size; |
| 1540 return 1; | 1540 return 1; |
| 1541 } | 1541 } |
| 1542 } | 1542 } |
| 1543 } | 1543 } |
| 1544 if ((m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0 && m_pParser->GetLastXRefO
ffset() == 0) { | 1544 if ((m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0 && m_pParser->GetLastXRefO
ffset() == 0) { |
| 1545 InitOldObjNumOffsets(); | 1545 InitOldObjNumOffsets(); |
| 1546 FX_DWORD dwEnd = m_pParser->GetLastObjNum(); | 1546 FX_DWORD dwEnd = m_pParser->GetLastObjNum(); |
| 1547 FX_BOOL bObjStm = (m_dwFlags & FPDFCREATE_OBJECTSTREAM) != 0; | 1547 FX_BOOL bObjStm = (m_dwFlags & FPDFCREATE_OBJECTSTREAM) != 0; |
| 1548 for (FX_DWORD objnum = 0; objnum <= dwEnd; objnum++) { | 1548 for (FX_DWORD objnum = 0; objnum <= dwEnd; objnum++) { |
| 1549 if (m_pParser->m_V5Type[objnum] == 0 || m_pParser->m_V5Type[objn
um] == 255) { | 1549 if (m_pParser->m_V5Type[objnum] == 0 || m_pParser->m_V5Type[objn
um] == 255) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1562 m_iStage = 20; | 1562 m_iStage = 20; |
| 1563 } | 1563 } |
| 1564 InitNewObjNumOffsets(); | 1564 InitNewObjNumOffsets(); |
| 1565 return m_iStage; | 1565 return m_iStage; |
| 1566 } | 1566 } |
| 1567 int32_t CPDF_Creator::WriteDoc_Stage2(IFX_Pause *pPause) | 1567 int32_t CPDF_Creator::WriteDoc_Stage2(IFX_Pause *pPause) |
| 1568 { | 1568 { |
| 1569 FXSYS_assert(m_iStage >= 20 || m_iStage < 30); | 1569 FXSYS_assert(m_iStage >= 20 || m_iStage < 30); |
| 1570 if (m_iStage == 20) { | 1570 if (m_iStage == 20) { |
| 1571 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 && m_pParser) { | 1571 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 && m_pParser) { |
| 1572 m_Pos = (FX_LPVOID)(uintptr_t)0; | 1572 m_Pos = (void*)(uintptr_t)0; |
| 1573 m_iStage = 21; | 1573 m_iStage = 21; |
| 1574 } else { | 1574 } else { |
| 1575 m_iStage = 25; | 1575 m_iStage = 25; |
| 1576 } | 1576 } |
| 1577 } | 1577 } |
| 1578 if (m_iStage == 21) { | 1578 if (m_iStage == 21) { |
| 1579 int32_t iRet = WriteOldObjs(pPause); | 1579 int32_t iRet = WriteOldObjs(pPause); |
| 1580 if (iRet) { | 1580 if (iRet) { |
| 1581 return iRet; | 1581 return iRet; |
| 1582 } | 1582 } |
| 1583 m_iStage = 25; | 1583 m_iStage = 25; |
| 1584 } | 1584 } |
| 1585 if (m_iStage == 25) { | 1585 if (m_iStage == 25) { |
| 1586 m_Pos = (FX_LPVOID)(uintptr_t)0; | 1586 m_Pos = (void*)(uintptr_t)0; |
| 1587 m_iStage = 26; | 1587 m_iStage = 26; |
| 1588 } | 1588 } |
| 1589 if (m_iStage == 26) { | 1589 if (m_iStage == 26) { |
| 1590 int32_t iRet = WriteNewObjs((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0, p
Pause); | 1590 int32_t iRet = WriteNewObjs((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0, p
Pause); |
| 1591 if (iRet) { | 1591 if (iRet) { |
| 1592 return iRet; | 1592 return iRet; |
| 1593 } | 1593 } |
| 1594 m_iStage = 27; | 1594 m_iStage = 27; |
| 1595 } | 1595 } |
| 1596 if (m_iStage == 27) { | 1596 if (m_iStage == 27) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1623 m_pXRefStream->End(this, TRUE); | 1623 m_pXRefStream->End(this, TRUE); |
| 1624 m_XrefStart = m_pXRefStream->m_PrevOffset; | 1624 m_XrefStart = m_pXRefStream->m_PrevOffset; |
| 1625 m_iStage = 90; | 1625 m_iStage = 90; |
| 1626 } else if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 || !m_pParser->IsXR
efStream()) { | 1626 } else if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 || !m_pParser->IsXR
efStream()) { |
| 1627 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 || m_pParser->GetLastX
RefOffset() == 0) { | 1627 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 || m_pParser->GetLastX
RefOffset() == 0) { |
| 1628 CFX_ByteString str; | 1628 CFX_ByteString str; |
| 1629 str = m_ObjectOffset.GetPtrAt(1) ? FX_BSTRC("xref\r\n") : FX_BST
RC("xref\r\n0 1\r\n0000000000 65536 f\r\n"); | 1629 str = m_ObjectOffset.GetPtrAt(1) ? FX_BSTRC("xref\r\n") : FX_BST
RC("xref\r\n0 1\r\n0000000000 65536 f\r\n"); |
| 1630 if (m_File.AppendString(str) < 0) { | 1630 if (m_File.AppendString(str) < 0) { |
| 1631 return -1; | 1631 return -1; |
| 1632 } | 1632 } |
| 1633 m_Pos = (FX_LPVOID)(uintptr_t)1; | 1633 m_Pos = (void*)(uintptr_t)1; |
| 1634 m_iStage = 81; | 1634 m_iStage = 81; |
| 1635 } else { | 1635 } else { |
| 1636 if (m_File.AppendString(FX_BSTRC("xref\r\n")) < 0) { | 1636 if (m_File.AppendString(FX_BSTRC("xref\r\n")) < 0) { |
| 1637 return -1; | 1637 return -1; |
| 1638 } | 1638 } |
| 1639 m_Pos = (FX_LPVOID)(uintptr_t)0; | 1639 m_Pos = (void*)(uintptr_t)0; |
| 1640 m_iStage = 82; | 1640 m_iStage = 82; |
| 1641 } | 1641 } |
| 1642 } else { | 1642 } else { |
| 1643 m_iStage = 90; | 1643 m_iStage = 90; |
| 1644 } | 1644 } |
| 1645 } | 1645 } |
| 1646 if (m_iStage == 81) { | 1646 if (m_iStage == 81) { |
| 1647 CFX_ByteString str; | 1647 CFX_ByteString str; |
| 1648 FX_DWORD i = (FX_DWORD)(uintptr_t)m_Pos, j; | 1648 FX_DWORD i = (FX_DWORD)(uintptr_t)m_Pos, j; |
| 1649 while (i <= dwLastObjNum) { | 1649 while (i <= dwLastObjNum) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1668 while (i < j) { | 1668 while (i < j) { |
| 1669 str.Format("%010d 00000 n\r\n", m_ObjectOffset[i ++]); | 1669 str.Format("%010d 00000 n\r\n", m_ObjectOffset[i ++]); |
| 1670 if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) { | 1670 if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) { |
| 1671 return -1; | 1671 return -1; |
| 1672 } | 1672 } |
| 1673 } | 1673 } |
| 1674 if (i > dwLastObjNum) { | 1674 if (i > dwLastObjNum) { |
| 1675 break; | 1675 break; |
| 1676 } | 1676 } |
| 1677 if (pPause && pPause->NeedToPauseNow()) { | 1677 if (pPause && pPause->NeedToPauseNow()) { |
| 1678 m_Pos = (FX_LPVOID)(uintptr_t)i; | 1678 m_Pos = (void*)(uintptr_t)i; |
| 1679 return 1; | 1679 return 1; |
| 1680 } | 1680 } |
| 1681 } | 1681 } |
| 1682 m_iStage = 90; | 1682 m_iStage = 90; |
| 1683 } | 1683 } |
| 1684 if (m_iStage == 82) { | 1684 if (m_iStage == 82) { |
| 1685 CFX_ByteString str; | 1685 CFX_ByteString str; |
| 1686 int32_t iCount = m_NewObjNumArray.GetSize(); | 1686 int32_t iCount = m_NewObjNumArray.GetSize(); |
| 1687 int32_t i = (int32_t)(uintptr_t)m_Pos; | 1687 int32_t i = (int32_t)(uintptr_t)m_Pos; |
| 1688 while (i < iCount) { | 1688 while (i < iCount) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1708 return -1; | 1708 return -1; |
| 1709 } | 1709 } |
| 1710 while (i < j) { | 1710 while (i < j) { |
| 1711 objnum = m_NewObjNumArray.ElementAt(i++); | 1711 objnum = m_NewObjNumArray.ElementAt(i++); |
| 1712 str.Format("%010d 00000 n\r\n", m_ObjectOffset[objnum]); | 1712 str.Format("%010d 00000 n\r\n", m_ObjectOffset[objnum]); |
| 1713 if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) { | 1713 if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) { |
| 1714 return -1; | 1714 return -1; |
| 1715 } | 1715 } |
| 1716 } | 1716 } |
| 1717 if (pPause && (i % 100) == 0 && pPause->NeedToPauseNow()) { | 1717 if (pPause && (i % 100) == 0 && pPause->NeedToPauseNow()) { |
| 1718 m_Pos = (FX_LPVOID)(uintptr_t)i; | 1718 m_Pos = (void*)(uintptr_t)i; |
| 1719 return 1; | 1719 return 1; |
| 1720 } | 1720 } |
| 1721 } | 1721 } |
| 1722 m_iStage = 90; | 1722 m_iStage = 90; |
| 1723 } | 1723 } |
| 1724 return m_iStage; | 1724 return m_iStage; |
| 1725 } | 1725 } |
| 1726 static int32_t _OutPutIndex(CFX_FileBufferArchive* pFile, FX_FILESIZE offset) | 1726 static int32_t _OutPutIndex(CFX_FileBufferArchive* pFile, FX_FILESIZE offset) |
| 1727 { | 1727 { |
| 1728 FXSYS_assert(pFile); | 1728 FXSYS_assert(pFile); |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1969 delete m_pXRefStream; | 1969 delete m_pXRefStream; |
| 1970 m_pXRefStream = NULL; | 1970 m_pXRefStream = NULL; |
| 1971 } | 1971 } |
| 1972 m_File.Clear(); | 1972 m_File.Clear(); |
| 1973 m_NewObjNumArray.RemoveAll(); | 1973 m_NewObjNumArray.RemoveAll(); |
| 1974 if (m_pIDArray) { | 1974 if (m_pIDArray) { |
| 1975 m_pIDArray->Release(); | 1975 m_pIDArray->Release(); |
| 1976 m_pIDArray = NULL; | 1976 m_pIDArray = NULL; |
| 1977 } | 1977 } |
| 1978 } | 1978 } |
| 1979 FX_BOOL CPDF_Creator::Create(FX_LPCSTR filename, FX_DWORD flags) | 1979 FX_BOOL CPDF_Creator::Create(const FX_CHAR* filename, FX_DWORD flags) |
| 1980 { | 1980 { |
| 1981 if (!m_File.AttachFile(filename)) { | 1981 if (!m_File.AttachFile(filename)) { |
| 1982 return FALSE; | 1982 return FALSE; |
| 1983 } | 1983 } |
| 1984 FX_BOOL bRet = Create(flags); | 1984 FX_BOOL bRet = Create(flags); |
| 1985 if (!bRet || !(flags & FPDFCREATE_PROGRESSIVE)) { | 1985 if (!bRet || !(flags & FPDFCREATE_PROGRESSIVE)) { |
| 1986 Clear(); | 1986 Clear(); |
| 1987 } | 1987 } |
| 1988 return bRet; | 1988 return bRet; |
| 1989 } | 1989 } |
| 1990 FX_BOOL CPDF_Creator::Create(FX_LPCWSTR filename, FX_DWORD flags) | 1990 FX_BOOL CPDF_Creator::Create(const FX_WCHAR* filename, FX_DWORD flags) |
| 1991 { | 1991 { |
| 1992 if (!m_File.AttachFile(filename)) { | 1992 if (!m_File.AttachFile(filename)) { |
| 1993 return FALSE; | 1993 return FALSE; |
| 1994 } | 1994 } |
| 1995 FX_BOOL bRet = Create(flags); | 1995 FX_BOOL bRet = Create(flags); |
| 1996 if (!bRet || !(flags & FPDFCREATE_PROGRESSIVE)) { | 1996 if (!bRet || !(flags & FPDFCREATE_PROGRESSIVE)) { |
| 1997 Clear(); | 1997 Clear(); |
| 1998 } | 1998 } |
| 1999 return bRet; | 1999 return bRet; |
| 2000 } | 2000 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2021 if (flags & FPDFCREATE_PROGRESSIVE) { | 2021 if (flags & FPDFCREATE_PROGRESSIVE) { |
| 2022 return TRUE; | 2022 return TRUE; |
| 2023 } | 2023 } |
| 2024 return Continue(NULL) > -1; | 2024 return Continue(NULL) > -1; |
| 2025 } | 2025 } |
| 2026 void CPDF_Creator::InitID(FX_BOOL bDefault ) | 2026 void CPDF_Creator::InitID(FX_BOOL bDefault ) |
| 2027 { | 2027 { |
| 2028 CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : NULL; | 2028 CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : NULL; |
| 2029 FX_BOOL bNewId = !m_pIDArray; | 2029 FX_BOOL bNewId = !m_pIDArray; |
| 2030 if (!m_pIDArray) { | 2030 if (!m_pIDArray) { |
| 2031 FX_LPDWORD pBuffer = NULL; | 2031 FX_DWORD* pBuffer = NULL; |
| 2032 m_pIDArray = CPDF_Array::Create(); | 2032 m_pIDArray = CPDF_Array::Create(); |
| 2033 CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetElement(0) : NULL; | 2033 CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetElement(0) : NULL; |
| 2034 if (pID1) { | 2034 if (pID1) { |
| 2035 m_pIDArray->Add(pID1->Clone()); | 2035 m_pIDArray->Add(pID1->Clone()); |
| 2036 } else { | 2036 } else { |
| 2037 pBuffer = FX_Alloc(FX_DWORD, 4); | 2037 pBuffer = FX_Alloc(FX_DWORD, 4); |
| 2038 PDF_GenerateFileID((FX_DWORD)(uintptr_t)this, m_dwLastObjNum, pBuffe
r); | 2038 PDF_GenerateFileID((FX_DWORD)(uintptr_t)this, m_dwLastObjNum, pBuffe
r); |
| 2039 CFX_ByteStringC bsBuffer((FX_LPCBYTE)pBuffer, 4 * sizeof(FX_DWORD)); | 2039 CFX_ByteStringC bsBuffer((const uint8_t*)pBuffer, 4 * sizeof(FX_DWOR
D)); |
| 2040 m_pIDArray->Add(CPDF_String::Create(bsBuffer, TRUE), m_pDocument); | 2040 m_pIDArray->Add(CPDF_String::Create(bsBuffer, TRUE), m_pDocument); |
| 2041 } | 2041 } |
| 2042 if (pBuffer) { | 2042 if (pBuffer) { |
| 2043 FX_Free(pBuffer); | 2043 FX_Free(pBuffer); |
| 2044 } | 2044 } |
| 2045 } | 2045 } |
| 2046 if (!bDefault) { | 2046 if (!bDefault) { |
| 2047 return; | 2047 return; |
| 2048 } | 2048 } |
| 2049 if (pOldIDArray) { | 2049 if (pOldIDArray) { |
| 2050 CPDF_Object* pID2 = pOldIDArray->GetElement(1); | 2050 CPDF_Object* pID2 = pOldIDArray->GetElement(1); |
| 2051 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) && m_pEncryptDict && pID2) { | 2051 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) && m_pEncryptDict && pID2) { |
| 2052 m_pIDArray->Add(pID2->Clone()); | 2052 m_pIDArray->Add(pID2->Clone()); |
| 2053 return; | 2053 return; |
| 2054 } | 2054 } |
| 2055 FX_LPDWORD pBuffer = FX_Alloc(FX_DWORD, 4); | 2055 FX_DWORD* pBuffer = FX_Alloc(FX_DWORD, 4); |
| 2056 PDF_GenerateFileID((FX_DWORD)(uintptr_t)this, m_dwLastObjNum, pBuffer); | 2056 PDF_GenerateFileID((FX_DWORD)(uintptr_t)this, m_dwLastObjNum, pBuffer); |
| 2057 CFX_ByteStringC bsBuffer((FX_LPCBYTE)pBuffer, 4 * sizeof(FX_DWORD)); | 2057 CFX_ByteStringC bsBuffer((const uint8_t*)pBuffer, 4 * sizeof(FX_DWORD)); |
| 2058 m_pIDArray->Add(CPDF_String::Create(bsBuffer, TRUE), m_pDocument); | 2058 m_pIDArray->Add(CPDF_String::Create(bsBuffer, TRUE), m_pDocument); |
| 2059 FX_Free(pBuffer); | 2059 FX_Free(pBuffer); |
| 2060 return; | 2060 return; |
| 2061 } | 2061 } |
| 2062 m_pIDArray->Add(m_pIDArray->GetElement(0)->Clone()); | 2062 m_pIDArray->Add(m_pIDArray->GetElement(0)->Clone()); |
| 2063 if (m_pEncryptDict && !pOldIDArray && m_pParser && bNewId) { | 2063 if (m_pEncryptDict && !pOldIDArray && m_pParser && bNewId) { |
| 2064 if (m_pEncryptDict->GetString(FX_BSTRC("Filter")) == FX_BSTRC("Standard"
)) { | 2064 if (m_pEncryptDict->GetString(FX_BSTRC("Filter")) == FX_BSTRC("Standard"
)) { |
| 2065 CPDF_StandardSecurityHandler handler; | 2065 CPDF_StandardSecurityHandler handler; |
| 2066 CFX_ByteString user_pass = m_pParser->GetPassword(); | 2066 CFX_ByteString user_pass = m_pParser->GetPassword(); |
| 2067 FX_DWORD flag = PDF_ENCRYPT_CONTENT; | 2067 FX_DWORD flag = PDF_ENCRYPT_CONTENT; |
| 2068 handler.OnCreate(m_pEncryptDict, m_pIDArray, (FX_LPCBYTE)user_pass,
user_pass.GetLength(), flag); | 2068 handler.OnCreate(m_pEncryptDict, m_pIDArray, (const uint8_t*)user_pa
ss, user_pass.GetLength(), flag); |
| 2069 if (m_pCryptoHandler && m_bNewCrypto) { | 2069 if (m_pCryptoHandler && m_bNewCrypto) { |
| 2070 delete m_pCryptoHandler; | 2070 delete m_pCryptoHandler; |
| 2071 } | 2071 } |
| 2072 m_pCryptoHandler = new CPDF_StandardCryptoHandler; | 2072 m_pCryptoHandler = new CPDF_StandardCryptoHandler; |
| 2073 m_pCryptoHandler->Init(m_pEncryptDict, &handler); | 2073 m_pCryptoHandler->Init(m_pEncryptDict, &handler); |
| 2074 m_bNewCrypto = TRUE; | 2074 m_bNewCrypto = TRUE; |
| 2075 m_bSecurityChanged = TRUE; | 2075 m_bSecurityChanged = TRUE; |
| 2076 } | 2076 } |
| 2077 } | 2077 } |
| 2078 } | 2078 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2127 m_bNewCrypto = FALSE; | 2127 m_bNewCrypto = FALSE; |
| 2128 if (!m_bStandardSecurity) { | 2128 if (!m_bStandardSecurity) { |
| 2129 return; | 2129 return; |
| 2130 } | 2130 } |
| 2131 if (m_pEncryptDict) { | 2131 if (m_pEncryptDict) { |
| 2132 m_pEncryptDict->Release(); | 2132 m_pEncryptDict->Release(); |
| 2133 m_pEncryptDict = NULL; | 2133 m_pEncryptDict = NULL; |
| 2134 } | 2134 } |
| 2135 m_bStandardSecurity = FALSE; | 2135 m_bStandardSecurity = FALSE; |
| 2136 } | 2136 } |
| OLD | NEW |