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

Unified Diff: core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp

Issue 1539573003: Convert CPDF_Parser::m_CrossRef to a std::map. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: add comments, separate two constants, rebase Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « core/include/fpdfapi/fpdf_parser.h ('k') | core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
diff --git a/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp b/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
index 328728ef2410f01b67fbe4d1ccbbc5edb83f7c29..49ec0bae9202b0275c53be1bdbb3ec43ab0600cb 100644
--- a/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
+++ b/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
@@ -1319,16 +1319,19 @@ int32_t CPDF_Creator::WriteOldIndirectObject(FX_DWORD objnum) {
return 1;
}
int32_t CPDF_Creator::WriteOldObjs(IFX_Pause* pPause) {
- FX_DWORD nOldSize = m_pParser->m_CrossRef.GetSize();
+ FX_DWORD nLastObjNum = m_pParser->GetLastObjNum();
+ if (!m_pParser->IsValidObjectNumber(nLastObjNum))
+ return 0;
+
FX_DWORD objnum = (FX_DWORD)(uintptr_t)m_Pos;
- for (; objnum < nOldSize; objnum++) {
+ for (; objnum <= nLastObjNum; ++objnum) {
int32_t iRet = WriteOldIndirectObject(objnum);
- if (!iRet) {
- continue;
- }
- if (iRet < 0) {
+ if (iRet < 0)
return iRet;
- }
+
+ if (!iRet)
+ continue;
+
m_ObjectSize[objnum] = (FX_DWORD)(m_Offset - m_ObjectOffset[objnum]);
if (pPause && pPause->NeedToPauseNow()) {
m_Pos = (void*)(uintptr_t)(objnum + 1);
@@ -1389,7 +1392,6 @@ void CPDF_Creator::InitOldObjNumOffsets() {
void CPDF_Creator::InitNewObjNumOffsets() {
FX_BOOL bIncremental = (m_dwFlags & FPDFCREATE_INCREMENTAL) != 0;
FX_BOOL bNoOriginal = (m_dwFlags & FPDFCREATE_NO_ORIGINAL) != 0;
- FX_DWORD nOldSize = m_pParser ? m_pParser->m_CrossRef.GetSize() : 0;
FX_POSITION pos = m_pDocument->m_IndirectObjs.GetStartPosition();
while (pos) {
size_t key = 0;
@@ -1403,10 +1405,9 @@ void CPDF_Creator::InitNewObjNumOffsets() {
if (!pObj->IsModified()) {
continue;
}
- } else {
- if (objnum < nOldSize && m_pParser->m_V5Type[objnum] != 0) {
- continue;
- }
+ } else if (m_pParser->IsValidObjectNumber(objnum) &&
+ m_pParser->m_V5Type[objnum]) {
+ continue;
}
AppendNewObjNum(objnum);
}
@@ -1433,8 +1434,8 @@ void CPDF_Creator::InitNewObjNumOffsets() {
FX_BOOL bNewStart = FALSE;
for (; i < iCount; i++) {
FX_DWORD dwCurObjNum = m_NewObjNumArray.ElementAt(i);
- FX_BOOL bExist =
- (dwCurObjNum < nOldSize && m_ObjectOffset.GetPtrAt(dwCurObjNum));
+ bool bExist = m_pParser->IsValidObjectNumber(dwCurObjNum) &&
+ m_ObjectOffset.GetPtrAt(dwCurObjNum);
if (bExist || dwCurObjNum - dwLastObjNum > 1) {
if (!bNewStart) {
m_ObjectOffset.Add(dwStartObjNum, dwLastObjNum - dwStartObjNum + 1);
@@ -1555,7 +1556,7 @@ int32_t CPDF_Creator::WriteDoc_Stage1(IFX_Pause* pPause) {
m_pParser->m_V5Type[objnum] == 255) {
continue;
}
- m_ObjectOffset[objnum] = m_pParser->m_CrossRef[objnum];
+ m_ObjectOffset[objnum] = m_pParser->m_ObjectInfo[objnum].pos;
if (bObjStm) {
m_pXRefStream->AddObjectNumberToIndexArray(objnum);
}
« no previous file with comments | « core/include/fpdfapi/fpdf_parser.h ('k') | core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698