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

Unified Diff: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp

Issue 1549103002: Make more CPDF_Parser method const. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: 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') | fpdfsdk/include/fsdk_annothandler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 c6e48e74a2cc9ba20a8177a4ef6cf26fb4deac9a..2965348c66e11b3fbc4b2d7730d89dbba902f66c 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
@@ -136,6 +136,12 @@ bool CPDF_Parser::IsValidObjectNumber(FX_DWORD objnum) const {
void CPDF_Parser::SetEncryptDictionary(CPDF_Dictionary* pDict) {
m_pEncryptDict = pDict;
}
+
+FX_FILESIZE CPDF_Parser::GetObjectPositionOrZero(FX_DWORD objnum) const {
+ auto it = m_ObjectInfo.find(objnum);
+ return it != m_ObjectInfo.end() ? it->second.pos : 0;
+}
+
void CPDF_Parser::CloseParser(FX_BOOL bReParse) {
m_bVersionUpdated = FALSE;
if (!bReParse) {
@@ -343,16 +349,17 @@ void CPDF_Parser::ReleaseEncryptHandler() {
m_pSecurityHandler.reset();
}
}
-FX_FILESIZE CPDF_Parser::GetObjectOffset(FX_DWORD objnum) {
+
+FX_FILESIZE CPDF_Parser::GetObjectOffset(FX_DWORD objnum) const {
if (!IsValidObjectNumber(objnum))
return 0;
if (m_V5Type[objnum] == 1)
- return m_ObjectInfo[objnum].pos;
+ return GetObjectPositionOrZero(objnum);
if (m_V5Type[objnum] == 2) {
- FX_FILESIZE pos = m_ObjectInfo[objnum].pos;
- return m_ObjectInfo[pos].pos;
+ FX_FILESIZE pos = GetObjectPositionOrZero(objnum);
+ return GetObjectPositionOrZero(pos);
}
return 0;
}
@@ -1234,32 +1241,33 @@ CPDF_StreamAcc* CPDF_Parser::GetObjectStream(FX_DWORD objnum) {
m_ObjectStreamMap.SetAt((void*)(uintptr_t)objnum, pStreamAcc);
return pStreamAcc;
}
-FX_FILESIZE CPDF_Parser::GetObjectSize(FX_DWORD objnum) {
+
+FX_FILESIZE CPDF_Parser::GetObjectSize(FX_DWORD objnum) const {
if (!IsValidObjectNumber(objnum))
return 0;
- if (m_V5Type[objnum] == 2) {
- objnum = m_ObjectInfo[objnum].pos;
- }
+ if (m_V5Type[objnum] == 2)
+ objnum = GetObjectPositionOrZero(objnum);
+
if (m_V5Type[objnum] == 1 || m_V5Type[objnum] == 255) {
- FX_FILESIZE offset = m_ObjectInfo[objnum].pos;
- if (offset == 0) {
+ FX_FILESIZE offset = GetObjectPositionOrZero(objnum);
+ if (offset == 0)
return 0;
- }
- void* pResult = FXSYS_bsearch(&offset, m_SortedOffset.GetData(),
- m_SortedOffset.GetSize(), sizeof(FX_FILESIZE),
- CompareFileSize);
- if (!pResult) {
+
+ FX_FILESIZE* pResult = static_cast<FX_FILESIZE*>(FXSYS_bsearch(
+ &offset, m_SortedOffset.GetData(), m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), CompareFileSize));
+ if (!pResult)
return 0;
- }
- if ((FX_FILESIZE*)pResult - (FX_FILESIZE*)m_SortedOffset.GetData() ==
- m_SortedOffset.GetSize() - 1) {
+
+ if (pResult - m_SortedOffset.GetData() == m_SortedOffset.GetSize() - 1)
return 0;
- }
- return ((FX_FILESIZE*)pResult)[1] - offset;
+
+ return pResult[1] - offset;
}
return 0;
}
+
void CPDF_Parser::GetIndirectBinary(FX_DWORD objnum,
uint8_t*& pBuffer,
FX_DWORD& size) {
@@ -1695,6 +1703,7 @@ CPDF_SyntaxParser::CPDF_SyntaxParser() {
m_dwWordPos = 0;
m_bFileStream = FALSE;
}
+
CPDF_SyntaxParser::~CPDF_SyntaxParser() {
FX_Free(m_pFileBuf);
}
@@ -1769,7 +1778,7 @@ FX_BOOL CPDF_SyntaxParser::ReadBlock(uint8_t* pBuf, FX_DWORD size) {
m_Pos += size;
return TRUE;
}
-#define MAX_WORD_BUFFER 256
+
void CPDF_SyntaxParser::GetNextWord() {
m_WordSize = 0;
m_bIsNumber = TRUE;
@@ -1806,7 +1815,7 @@ void CPDF_SyntaxParser::GetNextWord() {
return;
}
- if (m_WordSize < MAX_WORD_BUFFER)
+ if (m_WordSize < sizeof(m_WordBuffer) - 1)
m_WordBuffer[m_WordSize++] = ch;
}
} else if (ch == '<') {
@@ -1828,7 +1837,7 @@ void CPDF_SyntaxParser::GetNextWord() {
}
while (1) {
- if (m_WordSize < MAX_WORD_BUFFER)
+ if (m_WordSize < sizeof(m_WordBuffer) - 1)
m_WordBuffer[m_WordSize++] = ch;
if (!PDFCharIsNumeric(ch))
@@ -3777,7 +3786,7 @@ int32_t CPDF_DataAvail::CheckCrossRefStream(IFX_DownloadHints* pHints,
inline void CPDF_DataAvail::SetStartOffset(FX_FILESIZE dwOffset) {
m_Pos = dwOffset;
}
-#define MAX_WORD_BUFFER 256
+
FX_BOOL CPDF_DataAvail::GetNextToken(CFX_ByteString& token) {
m_WordSize = 0;
uint8_t ch;
@@ -3815,7 +3824,7 @@ FX_BOOL CPDF_DataAvail::GetNextToken(CFX_ByteString& token) {
return TRUE;
}
- if (m_WordSize < MAX_WORD_BUFFER)
+ if (m_WordSize < sizeof(m_WordBuffer) - 1)
Wei Li 2016/01/04 20:11:48 Should be "m_WordSize < sizeof(m_WordBuffer)"?
Lei Zhang 2016/01/05 01:27:53 That's because |CPDF_DataAvail::m_WordBuffer| is d
m_WordBuffer[m_WordSize++] = ch;
}
} else if (ch == '<') {
@@ -3842,7 +3851,7 @@ FX_BOOL CPDF_DataAvail::GetNextToken(CFX_ByteString& token) {
}
while (1) {
- if (m_WordSize < MAX_WORD_BUFFER)
+ if (m_WordSize < sizeof(m_WordBuffer) - 1)
Wei Li 2016/01/04 20:11:48 Ditto
m_WordBuffer[m_WordSize++] = ch;
if (!GetNextChar(ch))
« no previous file with comments | « core/include/fpdfapi/fpdf_parser.h ('k') | fpdfsdk/include/fsdk_annothandler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698