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

Side by Side Diff: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp

Issue 1653023004: Merge to XFA: Remove the m_ObjVersion member variable from CPDF_Parser. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 4 years, 10 months 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
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/include/fpdfapi/fpdf_parser.h" 7 #include "core/include/fpdfapi/fpdf_parser.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 return it != m_ObjectInfo.end() ? it->second.pos : 0; 124 return it != m_ObjectInfo.end() ? it->second.pos : 0;
125 } 125 }
126 126
127 uint8_t CPDF_Parser::GetObjectType(FX_DWORD objnum) const { 127 uint8_t CPDF_Parser::GetObjectType(FX_DWORD objnum) const {
128 ASSERT(IsValidObjectNumber(objnum)); 128 ASSERT(IsValidObjectNumber(objnum));
129 auto it = m_ObjectInfo.find(objnum); 129 auto it = m_ObjectInfo.find(objnum);
130 return it != m_ObjectInfo.end() ? it->second.type : 0; 130 return it != m_ObjectInfo.end() ? it->second.type : 0;
131 } 131 }
132 132
133 uint16_t CPDF_Parser::GetObjectGenNum(FX_DWORD objnum) const { 133 uint16_t CPDF_Parser::GetObjectGenNum(FX_DWORD objnum) const {
134 return m_ObjVersion[objnum]; 134 ASSERT(IsValidObjectNumber(objnum));
135 auto it = m_ObjectInfo.find(objnum);
136 return it != m_ObjectInfo.end() ? it->second.gennum : 0;
135 } 137 }
136 138
137 bool CPDF_Parser::IsObjectFreeOrNull(FX_DWORD objnum) const { 139 bool CPDF_Parser::IsObjectFreeOrNull(FX_DWORD objnum) const {
138 uint8_t type = GetObjectType(objnum); 140 uint8_t type = GetObjectType(objnum);
139 return type == 0 || type == 255; 141 return type == 0 || type == 255;
140 } 142 }
141 143
142 void CPDF_Parser::SetEncryptDictionary(CPDF_Dictionary* pDict) { 144 void CPDF_Parser::SetEncryptDictionary(CPDF_Dictionary* pDict) {
143 m_pEncryptDict = pDict; 145 m_pEncryptDict = pDict;
144 } 146 }
(...skipping 27 matching lines...) Expand all
172 SetEncryptDictionary(nullptr); 174 SetEncryptDictionary(nullptr);
173 if (m_bOwnFileRead && m_Syntax.m_pFileAccess) { 175 if (m_bOwnFileRead && m_Syntax.m_pFileAccess) {
174 m_Syntax.m_pFileAccess->Release(); 176 m_Syntax.m_pFileAccess->Release();
175 m_Syntax.m_pFileAccess = nullptr; 177 m_Syntax.m_pFileAccess = nullptr;
176 } 178 }
177 m_ObjectStreamMap.clear(); 179 m_ObjectStreamMap.clear();
178 m_ObjCache.clear(); 180 m_ObjCache.clear();
179 181
180 m_SortedOffset.RemoveAll(); 182 m_SortedOffset.RemoveAll();
181 m_ObjectInfo.clear(); 183 m_ObjectInfo.clear();
182 m_ObjVersion.RemoveAll();
183 int32_t iLen = m_Trailers.GetSize(); 184 int32_t iLen = m_Trailers.GetSize();
184 for (int32_t i = 0; i < iLen; ++i) { 185 for (int32_t i = 0; i < iLen; ++i) {
185 if (CPDF_Dictionary* trailer = m_Trailers.GetAt(i)) 186 if (CPDF_Dictionary* trailer = m_Trailers.GetAt(i))
186 trailer->Release(); 187 trailer->Release();
187 } 188 }
188 m_Trailers.RemoveAll(); 189 m_Trailers.RemoveAll();
189 if (m_pLinearized) { 190 if (m_pLinearized) {
190 m_pLinearized->Release(); 191 m_pLinearized->Release();
191 m_pLinearized = nullptr; 192 m_pLinearized = nullptr;
192 } 193 }
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 for (int32_t c = 0; c < 10; c++) { 480 for (int32_t c = 0; c < 10; c++) {
480 if (!std::isdigit(pEntry[c])) 481 if (!std::isdigit(pEntry[c]))
481 return FALSE; 482 return FALSE;
482 } 483 }
483 } 484 }
484 m_ObjectInfo[objnum].pos = offset; 485 m_ObjectInfo[objnum].pos = offset;
485 int32_t version = FXSYS_atoi(pEntry + 11); 486 int32_t version = FXSYS_atoi(pEntry + 11);
486 if (version >= 1) { 487 if (version >= 1) {
487 m_bVersionUpdated = TRUE; 488 m_bVersionUpdated = TRUE;
488 } 489 }
489 m_ObjVersion.SetAtGrow(objnum, version); 490 m_ObjectInfo[objnum].gennum = version;
490 if (m_ObjectInfo[objnum].pos < m_Syntax.m_FileLen) { 491 if (m_ObjectInfo[objnum].pos < m_Syntax.m_FileLen) {
491 void* pResult = FXSYS_bsearch( 492 void* pResult = FXSYS_bsearch(
492 &m_ObjectInfo[objnum].pos, m_SortedOffset.GetData(), 493 &m_ObjectInfo[objnum].pos, m_SortedOffset.GetData(),
493 m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), CompareFileSize); 494 m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), CompareFileSize);
494 if (!pResult) { 495 if (!pResult) {
495 m_SortedOffset.Add(m_ObjectInfo[objnum].pos); 496 m_SortedOffset.Add(m_ObjectInfo[objnum].pos);
496 } 497 }
497 } 498 }
498 m_ObjectInfo[objnum].type = 1; 499 m_ObjectInfo[objnum].type = 1;
499 } 500 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 for (int32_t c = 0; c < 10; c++) { 562 for (int32_t c = 0; c < 10; c++) {
562 if (!std::isdigit(pEntry[c])) 563 if (!std::isdigit(pEntry[c]))
563 return false; 564 return false;
564 } 565 }
565 } 566 }
566 m_ObjectInfo[objnum].pos = offset; 567 m_ObjectInfo[objnum].pos = offset;
567 int32_t version = FXSYS_atoi(pEntry + 11); 568 int32_t version = FXSYS_atoi(pEntry + 11);
568 if (version >= 1) { 569 if (version >= 1) {
569 m_bVersionUpdated = TRUE; 570 m_bVersionUpdated = TRUE;
570 } 571 }
571 m_ObjVersion.SetAtGrow(objnum, version); 572 m_ObjectInfo[objnum].gennum = version;
572 if (m_ObjectInfo[objnum].pos < m_Syntax.m_FileLen && 573 if (m_ObjectInfo[objnum].pos < m_Syntax.m_FileLen &&
573 !FindPosInOffsets(m_ObjectInfo[objnum].pos)) { 574 !FindPosInOffsets(m_ObjectInfo[objnum].pos)) {
574 m_SortedOffset.Add(m_ObjectInfo[objnum].pos); 575 m_SortedOffset.Add(m_ObjectInfo[objnum].pos);
575 } 576 }
576 m_ObjectInfo[objnum].type = 1; 577 m_ObjectInfo[objnum].type = 1;
577 } 578 }
578 } 579 }
579 } 580 }
580 } 581 }
581 m_Syntax.RestorePos(SavedPos + count * recordsize); 582 m_Syntax.RestorePos(SavedPos + count * recordsize);
(...skipping 17 matching lines...) Expand all
599 } 600 }
600 } 601 }
601 m_ObjectStreamMap.clear(); 602 m_ObjectStreamMap.clear();
602 m_bXRefStream = TRUE; 603 m_bXRefStream = TRUE;
603 return TRUE; 604 return TRUE;
604 } 605 }
605 606
606 FX_BOOL CPDF_Parser::RebuildCrossRef() { 607 FX_BOOL CPDF_Parser::RebuildCrossRef() {
607 m_ObjectInfo.clear(); 608 m_ObjectInfo.clear();
608 m_SortedOffset.RemoveAll(); 609 m_SortedOffset.RemoveAll();
609 m_ObjVersion.RemoveAll();
610 if (m_pTrailer) { 610 if (m_pTrailer) {
611 m_pTrailer->Release(); 611 m_pTrailer->Release();
612 m_pTrailer = NULL; 612 m_pTrailer = NULL;
613 } 613 }
614 int32_t status = 0; 614 int32_t status = 0;
615 int32_t inside_index = 0; 615 int32_t inside_index = 0;
616 FX_DWORD objnum = 0; 616 FX_DWORD objnum = 0;
617 FX_DWORD gennum = 0; 617 FX_DWORD gennum = 0;
618 int32_t depth = 0; 618 int32_t depth = 0;
619 const FX_DWORD kBufferSize = 4096; 619 const FX_DWORD kBufferSize = 4096;
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 FX_FILESIZE nLen = obj_end - obj_pos - offset; 804 FX_FILESIZE nLen = obj_end - obj_pos - offset;
805 if ((FX_DWORD)nLen > size - i) { 805 if ((FX_DWORD)nLen > size - i) {
806 pos = obj_end + m_Syntax.m_HeaderOffset; 806 pos = obj_end + m_Syntax.m_HeaderOffset;
807 bOverFlow = true; 807 bOverFlow = true;
808 } else { 808 } else {
809 i += (FX_DWORD)nLen; 809 i += (FX_DWORD)nLen;
810 } 810 }
811 if (!m_ObjectInfo.empty() && IsValidObjectNumber(objnum) && 811 if (!m_ObjectInfo.empty() && IsValidObjectNumber(objnum) &&
812 m_ObjectInfo[objnum].pos) { 812 m_ObjectInfo[objnum].pos) {
813 if (pObject) { 813 if (pObject) {
814 FX_DWORD oldgen = m_ObjVersion.GetAt(objnum); 814 FX_DWORD oldgen = GetObjectGenNum(objnum);
815 m_ObjectInfo[objnum].pos = obj_pos; 815 m_ObjectInfo[objnum].pos = obj_pos;
816 m_ObjVersion.SetAt(objnum, (int16_t)gennum); 816 m_ObjectInfo[objnum].gennum = gennum;
817 if (oldgen != gennum) { 817 if (oldgen != gennum) {
818 m_bVersionUpdated = TRUE; 818 m_bVersionUpdated = TRUE;
819 } 819 }
820 } 820 }
821 } else { 821 } else {
822 m_ObjectInfo[objnum].pos = obj_pos; 822 m_ObjectInfo[objnum].pos = obj_pos;
823 m_ObjectInfo[objnum].type = 1; 823 m_ObjectInfo[objnum].type = 1;
824 m_ObjVersion.SetAtGrow(objnum, (int16_t)gennum); 824 m_ObjectInfo[objnum].gennum = gennum;
825 } 825 }
826 if (pObject) { 826 if (pObject) {
827 pObject->Release(); 827 pObject->Release();
828 } 828 }
829 } 829 }
830 --i; 830 --i;
831 status = 0; 831 status = 0;
832 break; 832 break;
833 } 833 }
834 break; 834 break;
(...skipping 4017 matching lines...) Expand 10 before | Expand all | Expand 10 after
4852 if (!m_pLinearizedDict) 4852 if (!m_pLinearizedDict)
4853 return -1; 4853 return -1;
4854 CPDF_Array* pRange = m_pLinearizedDict->GetArrayBy("H"); 4854 CPDF_Array* pRange = m_pLinearizedDict->GetArrayBy("H");
4855 if (!pRange) 4855 if (!pRange)
4856 return -1; 4856 return -1;
4857 CPDF_Object* pStreamLen = pRange->GetElementValue(1); 4857 CPDF_Object* pStreamLen = pRange->GetElementValue(1);
4858 if (!pStreamLen) 4858 if (!pStreamLen)
4859 return -1; 4859 return -1;
4860 return pStreamLen->GetInteger(); 4860 return pStreamLen->GetInteger();
4861 } 4861 }
OLDNEW
« no previous file with comments | « core/include/fpdfapi/fpdf_parser.h ('k') | core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_unittest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698