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

Side by Side Diff: core/fpdfapi/parser/cpdf_data_avail.cpp

Issue 2451493002: Refcount all the IFX_ stream classes all the time. (Closed)
Patch Set: Clean up cast expression Created 4 years 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 | « core/fpdfapi/parser/cpdf_data_avail.h ('k') | core/fpdfapi/parser/cpdf_parser.h » ('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 2016 PDFium Authors. All rights reserved. 1 // Copyright 2016 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/parser/cpdf_data_avail.h" 7 #include "core/fpdfapi/parser/cpdf_data_avail.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 15 matching lines...) Expand all
26 #include "third_party/base/numerics/safe_conversions.h" 26 #include "third_party/base/numerics/safe_conversions.h"
27 #include "third_party/base/stl_util.h" 27 #include "third_party/base/stl_util.h"
28 28
29 CPDF_DataAvail::FileAvail::~FileAvail() {} 29 CPDF_DataAvail::FileAvail::~FileAvail() {}
30 30
31 CPDF_DataAvail::DownloadHints::~DownloadHints() {} 31 CPDF_DataAvail::DownloadHints::~DownloadHints() {}
32 32
33 // static 33 // static
34 int CPDF_DataAvail::s_CurrentDataAvailRecursionDepth = 0; 34 int CPDF_DataAvail::s_CurrentDataAvailRecursionDepth = 0;
35 35
36 CPDF_DataAvail::CPDF_DataAvail(FileAvail* pFileAvail, 36 CPDF_DataAvail::CPDF_DataAvail(
37 IFX_SeekableReadStream* pFileRead, 37 FileAvail* pFileAvail,
38 bool bSupportHintTable) 38 const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
39 bool bSupportHintTable)
39 : m_pFileAvail(pFileAvail), m_pFileRead(pFileRead) { 40 : m_pFileAvail(pFileAvail), m_pFileRead(pFileRead) {
40 m_Pos = 0; 41 m_Pos = 0;
41 m_dwFileLen = 0; 42 m_dwFileLen = 0;
42 if (m_pFileRead) { 43 if (m_pFileRead) {
43 m_dwFileLen = (uint32_t)m_pFileRead->GetSize(); 44 m_dwFileLen = (uint32_t)m_pFileRead->GetSize();
44 } 45 }
45 m_dwCurrentOffset = 0; 46 m_dwCurrentOffset = 0;
46 m_dwXRefOffset = 0; 47 m_dwXRefOffset = 0;
47 m_bufferOffset = 0; 48 m_bufferOffset = 0;
48 m_bufferSize = 0; 49 m_bufferSize = 0;
(...skipping 16 matching lines...) Expand all
65 m_bAcroFormLoad = false; 66 m_bAcroFormLoad = false;
66 m_bPageLoadedOK = false; 67 m_bPageLoadedOK = false;
67 m_bNeedDownLoadResource = false; 68 m_bNeedDownLoadResource = false;
68 m_bLinearizedFormParamLoad = false; 69 m_bLinearizedFormParamLoad = false;
69 m_pTrailer = nullptr; 70 m_pTrailer = nullptr;
70 m_pCurrentParser = nullptr; 71 m_pCurrentParser = nullptr;
71 m_pAcroForm = nullptr; 72 m_pAcroForm = nullptr;
72 m_pPageDict = nullptr; 73 m_pPageDict = nullptr;
73 m_pPageResource = nullptr; 74 m_pPageResource = nullptr;
74 m_docStatus = PDF_DATAAVAIL_HEADER; 75 m_docStatus = PDF_DATAAVAIL_HEADER;
75 m_parser.m_bOwnFileRead = false;
76 m_bTotalLoadPageTree = false; 76 m_bTotalLoadPageTree = false;
77 m_bCurPageDictLoadOK = false; 77 m_bCurPageDictLoadOK = false;
78 m_bLinearedDataOK = false; 78 m_bLinearedDataOK = false;
79 m_bSupportHintTable = bSupportHintTable; 79 m_bSupportHintTable = bSupportHintTable;
80 } 80 }
81 81
82 CPDF_DataAvail::~CPDF_DataAvail() { 82 CPDF_DataAvail::~CPDF_DataAvail() {
83 m_pHintTables.reset(); 83 m_pHintTables.reset();
84 for (CPDF_Object* pObject : m_arrayAcroforms) 84 for (CPDF_Object* pObject : m_arrayAcroforms)
85 delete pObject; 85 delete pObject;
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 m_docStatus = PDF_DATAAVAIL_DONE; 313 m_docStatus = PDF_DATAAVAIL_DONE;
314 return true; 314 return true;
315 } 315 }
316 316
317 pHints->AddSegment(0, (uint32_t)m_dwFileLen); 317 pHints->AddSegment(0, (uint32_t)m_dwFileLen);
318 return false; 318 return false;
319 } 319 }
320 320
321 bool CPDF_DataAvail::LoadAllXref(DownloadHints* pHints) { 321 bool CPDF_DataAvail::LoadAllXref(DownloadHints* pHints) {
322 m_parser.m_pSyntax->InitParser(m_pFileRead, (uint32_t)m_dwHeaderOffset); 322 m_parser.m_pSyntax->InitParser(m_pFileRead, (uint32_t)m_dwHeaderOffset);
323 m_parser.m_bOwnFileRead = false;
324 if (!m_parser.LoadAllCrossRefV4(m_dwLastXRefOffset) && 323 if (!m_parser.LoadAllCrossRefV4(m_dwLastXRefOffset) &&
325 !m_parser.LoadAllCrossRefV5(m_dwLastXRefOffset)) { 324 !m_parser.LoadAllCrossRefV5(m_dwLastXRefOffset)) {
326 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; 325 m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
327 return false; 326 return false;
328 } 327 }
329 328
330 m_dwRootObjNum = m_parser.GetRootObjNum(); 329 m_dwRootObjNum = m_parser.GetRootObjNum();
331 m_dwInfoObjNum = m_parser.GetInfoObjNum(); 330 m_dwInfoObjNum = m_parser.GetInfoObjNum();
332 m_pCurrentParser = &m_parser; 331 m_pCurrentParser = &m_parser;
333 m_docStatus = PDF_DATAAVAIL_ROOT; 332 m_docStatus = PDF_DATAAVAIL_ROOT;
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 } 710 }
712 711
713 bool CPDF_DataAvail::IsLinearized() { 712 bool CPDF_DataAvail::IsLinearized() {
714 return !!m_pLinearized; 713 return !!m_pLinearized;
715 } 714 }
716 715
717 bool CPDF_DataAvail::IsLinearizedFile(uint8_t* pData, uint32_t dwLen) { 716 bool CPDF_DataAvail::IsLinearizedFile(uint8_t* pData, uint32_t dwLen) {
718 if (m_pLinearized) 717 if (m_pLinearized)
719 return true; 718 return true;
720 719
721 ScopedFileStream file(IFX_MemoryStream::Create(pData, (size_t)dwLen, false)); 720 CFX_RetainPtr<IFX_MemoryStream> file =
722 int32_t offset = GetHeaderOffset(file.get()); 721 IFX_MemoryStream::Create(pData, (size_t)dwLen, false);
722 int32_t offset = GetHeaderOffset(file);
723 if (offset == -1) { 723 if (offset == -1) {
724 m_docStatus = PDF_DATAAVAIL_ERROR; 724 m_docStatus = PDF_DATAAVAIL_ERROR;
725 return false; 725 return false;
726 } 726 }
727 727
728 m_dwHeaderOffset = offset; 728 m_dwHeaderOffset = offset;
729 m_syntaxParser.InitParser(file.get(), offset); 729 m_syntaxParser.InitParser(file, offset);
730 m_syntaxParser.RestorePos(m_syntaxParser.m_HeaderOffset + 9); 730 m_syntaxParser.RestorePos(m_syntaxParser.m_HeaderOffset + 9);
731 731
732 bool bNumber; 732 bool bNumber;
733 CFX_ByteString wordObjNum = m_syntaxParser.GetNextWord(&bNumber); 733 CFX_ByteString wordObjNum = m_syntaxParser.GetNextWord(&bNumber);
734 if (!bNumber) 734 if (!bNumber)
735 return false; 735 return false;
736 736
737 uint32_t objnum = FXSYS_atoui(wordObjNum.c_str()); 737 uint32_t objnum = FXSYS_atoui(wordObjNum.c_str());
738 m_pLinearized = CPDF_LinearizedHeader::CreateForObject( 738 m_pLinearized = CPDF_LinearizedHeader::CreateForObject(
739 ParseIndirectObjectAt(m_syntaxParser.m_HeaderOffset + 9, objnum)); 739 ParseIndirectObjectAt(m_syntaxParser.m_HeaderOffset + 9, objnum));
740 if (!m_pLinearized || 740 if (!m_pLinearized ||
741 m_pLinearized->GetFileSize() != m_pFileRead->GetSize()) { 741 m_pLinearized->GetFileSize() != m_pFileRead->GetSize()) {
742 m_pLinearized.reset(); 742 m_pLinearized.reset();
743 return false; 743 return false;
744 } 744 }
745 return true; 745 return true;
746 } 746 }
747 747
748 bool CPDF_DataAvail::CheckEnd(DownloadHints* pHints) { 748 bool CPDF_DataAvail::CheckEnd(DownloadHints* pHints) {
749 uint32_t req_pos = (uint32_t)(m_dwFileLen > 1024 ? m_dwFileLen - 1024 : 0); 749 uint32_t req_pos = (uint32_t)(m_dwFileLen > 1024 ? m_dwFileLen - 1024 : 0);
750 uint32_t dwSize = (uint32_t)(m_dwFileLen - req_pos); 750 uint32_t dwSize = (uint32_t)(m_dwFileLen - req_pos);
751 751
752 if (m_pFileAvail->IsDataAvail(req_pos, dwSize)) { 752 if (m_pFileAvail->IsDataAvail(req_pos, dwSize)) {
753 uint8_t buffer[1024]; 753 uint8_t buffer[1024];
754 m_pFileRead->ReadBlock(buffer, req_pos, dwSize); 754 m_pFileRead->ReadBlock(buffer, req_pos, dwSize);
755 755
756 ScopedFileStream file( 756 CFX_RetainPtr<IFX_MemoryStream> file =
757 IFX_MemoryStream::Create(buffer, (size_t)dwSize, false)); 757 IFX_MemoryStream::Create(buffer, (size_t)dwSize, false);
758 m_syntaxParser.InitParser(file.get(), 0); 758 m_syntaxParser.InitParser(file, 0);
759 m_syntaxParser.RestorePos(dwSize - 1); 759 m_syntaxParser.RestorePos(dwSize - 1);
760 760
761 if (m_syntaxParser.SearchWord("startxref", true, false, dwSize)) { 761 if (m_syntaxParser.SearchWord("startxref", true, false, dwSize)) {
762 m_syntaxParser.GetNextWord(nullptr); 762 m_syntaxParser.GetNextWord(nullptr);
763 763
764 bool bNumber; 764 bool bNumber;
765 CFX_ByteString xrefpos_str = m_syntaxParser.GetNextWord(&bNumber); 765 CFX_ByteString xrefpos_str = m_syntaxParser.GetNextWord(&bNumber);
766 if (!bNumber) { 766 if (!bNumber) {
767 m_docStatus = PDF_DATAAVAIL_ERROR; 767 m_docStatus = PDF_DATAAVAIL_ERROR;
768 return false; 768 return false;
(...skipping 25 matching lines...) Expand all
794 uint32_t req_size = 794 uint32_t req_size =
795 (uint32_t)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512); 795 (uint32_t)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512);
796 796
797 if (m_pFileAvail->IsDataAvail(m_Pos, req_size)) { 797 if (m_pFileAvail->IsDataAvail(m_Pos, req_size)) {
798 int32_t iSize = (int32_t)(m_Pos + req_size - m_dwCurrentXRefSteam); 798 int32_t iSize = (int32_t)(m_Pos + req_size - m_dwCurrentXRefSteam);
799 CFX_BinaryBuf buf(iSize); 799 CFX_BinaryBuf buf(iSize);
800 uint8_t* pBuf = buf.GetBuffer(); 800 uint8_t* pBuf = buf.GetBuffer();
801 801
802 m_pFileRead->ReadBlock(pBuf, m_dwCurrentXRefSteam, iSize); 802 m_pFileRead->ReadBlock(pBuf, m_dwCurrentXRefSteam, iSize);
803 803
804 ScopedFileStream file(IFX_MemoryStream::Create(pBuf, (size_t)iSize, false)); 804 CFX_RetainPtr<IFX_MemoryStream> file =
805 m_parser.m_pSyntax->InitParser(file.get(), 0); 805 IFX_MemoryStream::Create(pBuf, (size_t)iSize, false);
806 m_parser.m_pSyntax->InitParser(file, 0);
806 807
807 bool bNumber; 808 bool bNumber;
808 CFX_ByteString objnum = m_parser.m_pSyntax->GetNextWord(&bNumber); 809 CFX_ByteString objnum = m_parser.m_pSyntax->GetNextWord(&bNumber);
809 if (!bNumber) 810 if (!bNumber)
810 return -1; 811 return -1;
811 812
812 uint32_t objNum = FXSYS_atoui(objnum.c_str()); 813 uint32_t objNum = FXSYS_atoui(objnum.c_str());
813 std::unique_ptr<CPDF_Object> pObj = 814 std::unique_ptr<CPDF_Object> pObj =
814 m_parser.ParseIndirectObjectAt(nullptr, 0, objNum); 815 m_parser.ParseIndirectObjectAt(nullptr, 0, objNum);
815 816
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 CFX_BinaryBuf buf(iSize); 1041 CFX_BinaryBuf buf(iSize);
1041 uint8_t* pBuf = buf.GetBuffer(); 1042 uint8_t* pBuf = buf.GetBuffer();
1042 if (!pBuf) { 1043 if (!pBuf) {
1043 m_docStatus = PDF_DATAAVAIL_ERROR; 1044 m_docStatus = PDF_DATAAVAIL_ERROR;
1044 return false; 1045 return false;
1045 } 1046 }
1046 1047
1047 if (!m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize)) 1048 if (!m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize))
1048 return false; 1049 return false;
1049 1050
1050 ScopedFileStream file(IFX_MemoryStream::Create(pBuf, (size_t)iSize, false)); 1051 CFX_RetainPtr<IFX_MemoryStream> file =
1051 m_syntaxParser.InitParser(file.get(), 0); 1052 IFX_MemoryStream::Create(pBuf, (size_t)iSize, false);
1053 m_syntaxParser.InitParser(file, 0);
1052 1054
1053 std::unique_ptr<CPDF_Object> pTrailer( 1055 std::unique_ptr<CPDF_Object> pTrailer(
1054 m_syntaxParser.GetObject(nullptr, 0, 0, true)); 1056 m_syntaxParser.GetObject(nullptr, 0, 0, true));
1055 if (!pTrailer) { 1057 if (!pTrailer) {
1056 m_Pos += m_syntaxParser.SavePos(); 1058 m_Pos += m_syntaxParser.SavePos();
1057 pHints->AddSegment(m_Pos, iTrailerSize); 1059 pHints->AddSegment(m_Pos, iTrailerSize);
1058 return false; 1060 return false;
1059 } 1061 }
1060 1062
1061 if (!pTrailer->IsDictionary()) 1063 if (!pTrailer->IsDictionary())
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after
1699 return AreObjectsAvailable(obj_array, true, nullptr, dummy); 1701 return AreObjectsAvailable(obj_array, true, nullptr, dummy);
1700 } 1702 }
1701 1703
1702 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {} 1704 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {}
1703 1705
1704 CPDF_DataAvail::PageNode::~PageNode() { 1706 CPDF_DataAvail::PageNode::~PageNode() {
1705 for (int32_t i = 0; i < m_childNode.GetSize(); ++i) 1707 for (int32_t i = 0; i < m_childNode.GetSize(); ++i)
1706 delete m_childNode[i]; 1708 delete m_childNode[i];
1707 m_childNode.RemoveAll(); 1709 m_childNode.RemoveAll();
1708 } 1710 }
OLDNEW
« no previous file with comments | « core/fpdfapi/parser/cpdf_data_avail.h ('k') | core/fpdfapi/parser/cpdf_parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698