Index: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
index 5cc117798cb177b5915a483a677bfcbdead9b0bb..3696bb13dbdcca595b6f5cd5d38fd298df1af95a 100644 |
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
@@ -131,7 +131,9 @@ uint8_t CPDF_Parser::GetObjectType(FX_DWORD objnum) const { |
} |
uint16_t CPDF_Parser::GetObjectGenNum(FX_DWORD objnum) const { |
- return m_ObjVersion[objnum]; |
+ ASSERT(IsValidObjectNumber(objnum)); |
+ auto it = m_ObjectInfo.find(objnum); |
+ return it != m_ObjectInfo.end() ? it->second.gennum : 0; |
} |
bool CPDF_Parser::IsObjectFreeOrNull(FX_DWORD objnum) const { |
@@ -179,7 +181,6 @@ void CPDF_Parser::CloseParser() { |
m_SortedOffset.RemoveAll(); |
m_ObjectInfo.clear(); |
- m_ObjVersion.RemoveAll(); |
int32_t iLen = m_Trailers.GetSize(); |
for (int32_t i = 0; i < iLen; ++i) { |
if (CPDF_Dictionary* trailer = m_Trailers.GetAt(i)) |
@@ -486,7 +487,7 @@ FX_BOOL CPDF_Parser::LoadLinearizedCrossRefV4(FX_FILESIZE pos, |
if (version >= 1) { |
m_bVersionUpdated = TRUE; |
} |
- m_ObjVersion.SetAtGrow(objnum, version); |
+ m_ObjectInfo[objnum].gennum = version; |
if (m_ObjectInfo[objnum].pos < m_Syntax.m_FileLen) { |
void* pResult = FXSYS_bsearch( |
&m_ObjectInfo[objnum].pos, m_SortedOffset.GetData(), |
@@ -568,7 +569,7 @@ bool CPDF_Parser::LoadCrossRefV4(FX_FILESIZE pos, |
if (version >= 1) { |
m_bVersionUpdated = TRUE; |
} |
- m_ObjVersion.SetAtGrow(objnum, version); |
+ m_ObjectInfo[objnum].gennum = version; |
if (m_ObjectInfo[objnum].pos < m_Syntax.m_FileLen && |
!FindPosInOffsets(m_ObjectInfo[objnum].pos)) { |
m_SortedOffset.Add(m_ObjectInfo[objnum].pos); |
@@ -606,7 +607,6 @@ FX_BOOL CPDF_Parser::LoadAllCrossRefV5(FX_FILESIZE xrefpos) { |
FX_BOOL CPDF_Parser::RebuildCrossRef() { |
m_ObjectInfo.clear(); |
m_SortedOffset.RemoveAll(); |
- m_ObjVersion.RemoveAll(); |
if (m_pTrailer) { |
m_pTrailer->Release(); |
m_pTrailer = NULL; |
@@ -811,9 +811,9 @@ FX_BOOL CPDF_Parser::RebuildCrossRef() { |
if (!m_ObjectInfo.empty() && IsValidObjectNumber(objnum) && |
m_ObjectInfo[objnum].pos) { |
if (pObject) { |
- FX_DWORD oldgen = m_ObjVersion.GetAt(objnum); |
+ FX_DWORD oldgen = GetObjectGenNum(objnum); |
m_ObjectInfo[objnum].pos = obj_pos; |
- m_ObjVersion.SetAt(objnum, (int16_t)gennum); |
+ m_ObjectInfo[objnum].gennum = gennum; |
if (oldgen != gennum) { |
m_bVersionUpdated = TRUE; |
} |
@@ -821,7 +821,7 @@ FX_BOOL CPDF_Parser::RebuildCrossRef() { |
} else { |
m_ObjectInfo[objnum].pos = obj_pos; |
m_ObjectInfo[objnum].type = 1; |
- m_ObjVersion.SetAtGrow(objnum, (int16_t)gennum); |
+ m_ObjectInfo[objnum].gennum = gennum; |
} |
if (pObject) { |
pObject->Release(); |