Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: core/fpdfapi/edit/fpdf_edit_create.cpp

Issue 2484033002: Return unique_ptr from CPDF_Object::Clone(). (Closed)
Patch Set: std::move() it Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | core/fpdfapi/page/cpdf_contentmarkitem.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/edit/editint.h" 7 #include "core/fpdfapi/edit/editint.h"
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 uint8_t* m_pData; 397 uint8_t* m_pData;
398 uint32_t m_dwSize; 398 uint32_t m_dwSize;
399 CPDF_Dictionary* m_pDict; 399 CPDF_Dictionary* m_pDict;
400 bool m_bCloned; 400 bool m_bCloned;
401 bool m_bNewData; 401 bool m_bNewData;
402 CPDF_StreamAcc m_Acc; 402 CPDF_StreamAcc m_Acc;
403 }; 403 };
404 404
405 void CPDF_FlateEncoder::CloneDict() { 405 void CPDF_FlateEncoder::CloneDict() {
406 if (!m_bCloned) { 406 if (!m_bCloned) {
407 m_pDict = ToDictionary(m_pDict->Clone()); 407 m_pDict = ToDictionary(m_pDict->Clone().release());
408 ASSERT(m_pDict); 408 ASSERT(m_pDict);
409 m_bCloned = true; 409 m_bCloned = true;
410 } 410 }
411 } 411 }
412 412
413 CPDF_FlateEncoder::CPDF_FlateEncoder(CPDF_Stream* pStream, bool bFlateEncode) 413 CPDF_FlateEncoder::CPDF_FlateEncoder(CPDF_Stream* pStream, bool bFlateEncode)
414 : m_pData(nullptr), 414 : m_pData(nullptr),
415 m_dwSize(0), 415 m_dwSize(0),
416 m_pDict(nullptr), 416 m_pDict(nullptr),
417 m_bCloned(false), 417 m_bCloned(false),
418 m_bNewData(false) { 418 m_bNewData(false) {
419 m_Acc.LoadAllData(pStream, true); 419 m_Acc.LoadAllData(pStream, true);
420 if ((pStream && pStream->GetDict() && 420 if ((pStream && pStream->GetDict() &&
421 pStream->GetDict()->KeyExist("Filter")) || 421 pStream->GetDict()->KeyExist("Filter")) ||
422 !bFlateEncode) { 422 !bFlateEncode) {
423 if (pStream->GetDict()->KeyExist("Filter") && !bFlateEncode) { 423 if (pStream->GetDict()->KeyExist("Filter") && !bFlateEncode) {
424 CPDF_StreamAcc destAcc; 424 CPDF_StreamAcc destAcc;
425 destAcc.LoadAllData(pStream); 425 destAcc.LoadAllData(pStream);
426 m_dwSize = destAcc.GetSize(); 426 m_dwSize = destAcc.GetSize();
427 m_pData = (uint8_t*)destAcc.DetachData(); 427 m_pData = (uint8_t*)destAcc.DetachData();
428 m_pDict = ToDictionary(pStream->GetDict()->Clone()); 428 m_pDict = ToDictionary(pStream->GetDict()->Clone().release());
429 m_pDict->RemoveFor("Filter"); 429 m_pDict->RemoveFor("Filter");
430 m_bNewData = true; 430 m_bNewData = true;
431 m_bCloned = true; 431 m_bCloned = true;
432 } else { 432 } else {
433 m_pData = (uint8_t*)m_Acc.GetData(); 433 m_pData = (uint8_t*)m_Acc.GetData();
434 m_dwSize = m_Acc.GetSize(); 434 m_dwSize = m_Acc.GetSize();
435 m_pDict = pStream->GetDict(); 435 m_pDict = pStream->GetDict();
436 } 436 }
437 return; 437 return;
438 } 438 }
439 439
440 m_bNewData = true; 440 m_bNewData = true;
441 m_bCloned = true; 441 m_bCloned = true;
442 // TODO(thestig): Move to Init() and check return value. 442 // TODO(thestig): Move to Init() and check return value.
443 ::FlateEncode(m_Acc.GetData(), m_Acc.GetSize(), &m_pData, &m_dwSize); 443 ::FlateEncode(m_Acc.GetData(), m_Acc.GetSize(), &m_pData, &m_dwSize);
444 m_pDict = ToDictionary(pStream->GetDict()->Clone()); 444 m_pDict = ToDictionary(pStream->GetDict()->Clone().release());
445 m_pDict->SetIntegerFor("Length", m_dwSize); 445 m_pDict->SetIntegerFor("Length", m_dwSize);
446 m_pDict->SetNameFor("Filter", "FlateDecode"); 446 m_pDict->SetNameFor("Filter", "FlateDecode");
447 m_pDict->RemoveFor("DecodeParms"); 447 m_pDict->RemoveFor("DecodeParms");
448 } 448 }
449 449
450 CPDF_FlateEncoder::CPDF_FlateEncoder(const uint8_t* pBuffer, 450 CPDF_FlateEncoder::CPDF_FlateEncoder(const uint8_t* pBuffer,
451 uint32_t size, 451 uint32_t size,
452 bool bFlateEncode, 452 bool bFlateEncode,
453 bool bXRefStream) 453 bool bXRefStream)
454 : m_pData(nullptr), 454 : m_pData(nullptr),
(...skipping 1469 matching lines...) Expand 10 before | Expand all | Expand 10 after
1924 return Continue(nullptr) > -1; 1924 return Continue(nullptr) > -1;
1925 } 1925 }
1926 1926
1927 void CPDF_Creator::InitID(bool bDefault) { 1927 void CPDF_Creator::InitID(bool bDefault) {
1928 CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : nullptr; 1928 CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : nullptr;
1929 bool bNewId = !m_pIDArray; 1929 bool bNewId = !m_pIDArray;
1930 if (bNewId) { 1930 if (bNewId) {
1931 m_pIDArray.reset(new CPDF_Array); 1931 m_pIDArray.reset(new CPDF_Array);
1932 CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetObjectAt(0) : nullptr; 1932 CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetObjectAt(0) : nullptr;
1933 if (pID1) { 1933 if (pID1) {
1934 m_pIDArray->Add(pID1->Clone()); 1934 m_pIDArray->Add(pID1->Clone().release());
1935 } else { 1935 } else {
1936 std::vector<uint8_t> buffer = 1936 std::vector<uint8_t> buffer =
1937 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum); 1937 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum);
1938 CFX_ByteString bsBuffer(buffer.data(), buffer.size()); 1938 CFX_ByteString bsBuffer(buffer.data(), buffer.size());
1939 m_pIDArray->Add(new CPDF_String(bsBuffer, true)); 1939 m_pIDArray->Add(new CPDF_String(bsBuffer, true));
1940 } 1940 }
1941 } 1941 }
1942 if (!bDefault) { 1942 if (!bDefault) {
1943 return; 1943 return;
1944 } 1944 }
1945 if (pOldIDArray) { 1945 if (pOldIDArray) {
1946 CPDF_Object* pID2 = pOldIDArray->GetObjectAt(1); 1946 CPDF_Object* pID2 = pOldIDArray->GetObjectAt(1);
1947 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) && m_pEncryptDict && pID2) { 1947 if ((m_dwFlags & FPDFCREATE_INCREMENTAL) && m_pEncryptDict && pID2) {
1948 m_pIDArray->Add(pID2->Clone()); 1948 m_pIDArray->Add(pID2->Clone().release());
1949 return; 1949 return;
1950 } 1950 }
1951 std::vector<uint8_t> buffer = 1951 std::vector<uint8_t> buffer =
1952 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum); 1952 PDF_GenerateFileID((uint32_t)(uintptr_t) this, m_dwLastObjNum);
1953 CFX_ByteString bsBuffer(buffer.data(), buffer.size()); 1953 CFX_ByteString bsBuffer(buffer.data(), buffer.size());
1954 m_pIDArray->Add(new CPDF_String(bsBuffer, true)); 1954 m_pIDArray->Add(new CPDF_String(bsBuffer, true));
1955 return; 1955 return;
1956 } 1956 }
1957 m_pIDArray->Add(m_pIDArray->GetObjectAt(0)->Clone()); 1957 m_pIDArray->Add(m_pIDArray->GetObjectAt(0)->Clone().release());
1958 if (m_pEncryptDict && !pOldIDArray && m_pParser && bNewId) { 1958 if (m_pEncryptDict && !pOldIDArray && m_pParser && bNewId) {
1959 if (m_pEncryptDict->GetStringFor("Filter") == "Standard") { 1959 if (m_pEncryptDict->GetStringFor("Filter") == "Standard") {
1960 CFX_ByteString user_pass = m_pParser->GetPassword(); 1960 CFX_ByteString user_pass = m_pParser->GetPassword();
1961 uint32_t flag = PDF_ENCRYPT_CONTENT; 1961 uint32_t flag = PDF_ENCRYPT_CONTENT;
1962 1962
1963 CPDF_SecurityHandler handler; 1963 CPDF_SecurityHandler handler;
1964 handler.OnCreate(m_pEncryptDict, m_pIDArray.get(), user_pass.raw_str(), 1964 handler.OnCreate(m_pEncryptDict, m_pIDArray.get(), user_pass.raw_str(),
1965 user_pass.GetLength(), flag); 1965 user_pass.GetLength(), flag);
1966 if (m_bLocalCryptoHandler) 1966 if (m_bLocalCryptoHandler)
1967 delete m_pCryptoHandler; 1967 delete m_pCryptoHandler;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2012 m_pCryptoHandler = nullptr; 2012 m_pCryptoHandler = nullptr;
2013 } 2013 }
2014 void CPDF_Creator::ResetStandardSecurity() { 2014 void CPDF_Creator::ResetStandardSecurity() {
2015 if (!m_bLocalCryptoHandler) 2015 if (!m_bLocalCryptoHandler)
2016 return; 2016 return;
2017 2017
2018 delete m_pCryptoHandler; 2018 delete m_pCryptoHandler;
2019 m_pCryptoHandler = nullptr; 2019 m_pCryptoHandler = nullptr;
2020 m_bLocalCryptoHandler = false; 2020 m_bLocalCryptoHandler = false;
2021 } 2021 }
OLDNEW
« no previous file with comments | « no previous file | core/fpdfapi/page/cpdf_contentmarkitem.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698