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 cd923f3e2241eb7cbcf72244294f7bdf13f3fa70..984e08d882cd04f95c9ce223500c18ac8ac40f3e 100644 |
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
@@ -8,12 +8,59 @@ |
#include <utility> |
#include <vector> |
+#include "../../../../third_party/base/nonstd_unique_ptr.h" |
#include "../../../include/fpdfapi/fpdf_module.h" |
#include "../../../include/fpdfapi/fpdf_page.h" |
#include "../../../include/fpdfapi/fpdf_parser.h" |
#include "../../../include/fxcrt/fx_safe_types.h" |
#include "../fpdf_page/pageint.h" |
+namespace { |
+ |
+int CompareFileSize(const void* p1, const void* p2) { |
+ return *(FX_FILESIZE*)p1 - *(FX_FILESIZE*)p2; |
+} |
+ |
+int32_t GetHeaderOffset(IFX_FileRead* pFile) { |
+ const FX_DWORD tag = FXDWORD_FROM_LSBFIRST(0x46445025); |
+ const size_t kBufSize = 4; |
+ uint8_t buf[kBufSize]; |
+ int32_t offset = 0; |
+ while (offset <= 1024) { |
+ if (!pFile->ReadBlock(buf, offset, kBufSize)) |
+ return -1; |
+ |
+ if (*(FX_DWORD*)buf == tag) |
+ return offset; |
+ |
+ ++offset; |
+ } |
+ return -1; |
+} |
+ |
+int32_t GetDirectInteger(CPDF_Dictionary* pDict, const CFX_ByteStringC& key) { |
+ CPDF_Object* pObj = pDict->GetElement(key); |
+ if (pObj && (pObj->GetType() == PDFOBJ_NUMBER)) |
+ return ((CPDF_Number*)pObj)->GetInteger(); |
+ return 0; |
+} |
+ |
+bool CheckDirectType(CPDF_Dictionary* pDict, |
+ const CFX_ByteStringC& key, |
+ int32_t iType) { |
+ CPDF_Object* pObj = pDict->GetElement(key); |
+ return !pObj || pObj->GetType() == iType; |
+} |
+ |
+FX_DWORD GetVarInt(const uint8_t* p, int32_t n) { |
+ FX_DWORD result = 0; |
+ for (int32_t i = 0; i < n; ++i) |
+ result = result * 256 + p[i]; |
+ return result; |
+} |
+ |
+} // namespace |
+ |
FX_BOOL IsSignatureDict(const CPDF_Dictionary* pDict) { |
CPDF_Object* pType = pDict->GetElementValue(FX_BSTRC("Type")); |
if (!pType) { |
@@ -27,16 +74,6 @@ FX_BOOL IsSignatureDict(const CPDF_Dictionary* pDict) { |
} |
return FALSE; |
} |
-static int _CompareFileSize(const void* p1, const void* p2) { |
- FX_FILESIZE ret = (*(FX_FILESIZE*)p1) - (*(FX_FILESIZE*)p2); |
- if (ret > 0) { |
- return 1; |
- } |
- if (ret < 0) { |
- return -1; |
- } |
- return 0; |
-} |
CPDF_Parser::CPDF_Parser() { |
m_pDocument = NULL; |
@@ -99,24 +136,6 @@ void CPDF_Parser::CloseParser(FX_BOOL bReParse) { |
m_pLinearized = NULL; |
} |
} |
-static int32_t GetHeaderOffset(IFX_FileRead* pFile) { |
- FX_DWORD tag = FXDWORD_FROM_LSBFIRST(0x46445025); |
- uint8_t buf[4]; |
- int32_t offset = 0; |
- while (1) { |
- if (!pFile->ReadBlock(buf, offset, 4)) { |
- return -1; |
- } |
- if (*(FX_DWORD*)buf == tag) { |
- return offset; |
- } |
- offset++; |
- if (offset > 1024) { |
- return -1; |
- } |
- } |
- return -1; |
-} |
CPDF_SecurityHandler* FPDF_CreateStandardSecurityHandler(); |
CPDF_SecurityHandler* FPDF_CreatePubKeyHandler(void*); |
FX_DWORD CPDF_Parser::StartParse(IFX_FileRead* pFileAccess, |
@@ -159,7 +178,7 @@ FX_DWORD CPDF_Parser::StartParse(IFX_FileRead* pFileAccess, |
FX_FILESIZE startxref_offset = m_Syntax.SavePos(); |
void* pResult = FXSYS_bsearch(&startxref_offset, m_SortedOffset.GetData(), |
m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), |
- _CompareFileSize); |
+ CompareFileSize); |
if (pResult == NULL) { |
m_SortedOffset.Add(startxref_offset); |
} |
@@ -207,7 +226,7 @@ FX_DWORD CPDF_Parser::StartParse(IFX_FileRead* pFileAccess, |
} |
} |
FXSYS_qsort(m_SortedOffset.GetData(), m_SortedOffset.GetSize(), |
- sizeof(FX_FILESIZE), _CompareFileSize); |
+ sizeof(FX_FILESIZE), CompareFileSize); |
FX_DWORD RootObjNum = GetRootObjNum(); |
if (RootObjNum == 0) { |
ReleaseEncryptHandler(); |
@@ -313,26 +332,7 @@ FX_FILESIZE CPDF_Parser::GetObjectOffset(FX_DWORD objnum) { |
} |
return 0; |
} |
-static int32_t GetDirectInteger(CPDF_Dictionary* pDict, |
- const CFX_ByteStringC& key) { |
- CPDF_Object* pObj = pDict->GetElement(key); |
- if (pObj == NULL) { |
- return 0; |
- } |
- if (pObj->GetType() == PDFOBJ_NUMBER) { |
- return ((CPDF_Number*)pObj)->GetInteger(); |
- } |
- return 0; |
-} |
-static FX_BOOL CheckDirectType(CPDF_Dictionary* pDict, |
- const CFX_ByteStringC& key, |
- int32_t iType) { |
- CPDF_Object* pObj = pDict->GetElement(key); |
- if (!pObj) { |
- return TRUE; |
- } |
- return pObj->GetType() == iType; |
-} |
+ |
FX_BOOL CPDF_Parser::LoadAllCrossRefV4(FX_FILESIZE xrefpos) { |
if (!LoadCrossRefV4(xrefpos, 0, TRUE, FALSE)) { |
return FALSE; |
@@ -424,7 +424,7 @@ FX_BOOL CPDF_Parser::LoadLinearizedCrossRefV4(FX_FILESIZE pos, |
m_Syntax.RestorePos(dwStartPos); |
void* pResult = |
FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), |
- sizeof(FX_FILESIZE), _CompareFileSize); |
+ sizeof(FX_FILESIZE), CompareFileSize); |
if (pResult == NULL) { |
m_SortedOffset.Add(pos); |
} |
@@ -471,7 +471,7 @@ FX_BOOL CPDF_Parser::LoadLinearizedCrossRefV4(FX_FILESIZE pos, |
if (m_CrossRef[objnum] < m_Syntax.m_FileLen) { |
void* pResult = FXSYS_bsearch( |
&m_CrossRef[objnum], m_SortedOffset.GetData(), |
- m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize); |
+ m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), CompareFileSize); |
if (pResult == NULL) { |
m_SortedOffset.Add(m_CrossRef[objnum]); |
} |
@@ -484,51 +484,48 @@ FX_BOOL CPDF_Parser::LoadLinearizedCrossRefV4(FX_FILESIZE pos, |
m_Syntax.RestorePos(SavedPos + count * recordsize); |
return TRUE; |
} |
-FX_BOOL CPDF_Parser::LoadCrossRefV4(FX_FILESIZE pos, |
- FX_FILESIZE streampos, |
- FX_BOOL bSkip, |
- FX_BOOL bFirst) { |
+ |
+bool CPDF_Parser::FindPosInOffsets(FX_FILESIZE pos) const { |
+ return FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), |
+ sizeof(FX_FILESIZE), CompareFileSize); |
+} |
+ |
+bool CPDF_Parser::LoadCrossRefV4(FX_FILESIZE pos, |
+ FX_FILESIZE streampos, |
+ FX_BOOL bSkip, |
+ FX_BOOL bFirst) { |
m_Syntax.RestorePos(pos); |
- if (m_Syntax.GetKeyword() != FX_BSTRC("xref")) { |
- return FALSE; |
- } |
- void* pResult = |
- FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), |
- sizeof(FX_FILESIZE), _CompareFileSize); |
- if (pResult == NULL) { |
+ if (m_Syntax.GetKeyword() != FX_BSTRC("xref")) |
+ return false; |
+ |
+ if (!FindPosInOffsets(pos)) |
m_SortedOffset.Add(pos); |
- } |
- if (streampos) { |
- void* pResult = FXSYS_bsearch(&streampos, m_SortedOffset.GetData(), |
- m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), |
- _CompareFileSize); |
- if (pResult == NULL) { |
+ |
+ if (streampos && !FindPosInOffsets(streampos)) |
m_SortedOffset.Add(streampos); |
- } |
- } |
+ |
while (1) { |
FX_FILESIZE SavedPos = m_Syntax.SavePos(); |
FX_BOOL bIsNumber; |
CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber); |
- if (word.IsEmpty()) { |
- return FALSE; |
- } |
+ if (word.IsEmpty()) |
+ return false; |
+ |
if (!bIsNumber) { |
m_Syntax.RestorePos(SavedPos); |
break; |
} |
FX_DWORD start_objnum = FXSYS_atoi(word); |
- if (start_objnum >= (1 << 20)) { |
- return FALSE; |
- } |
+ if (start_objnum >= (1 << 20)) |
+ return false; |
+ |
FX_DWORD count = m_Syntax.GetDirectNum(); |
m_Syntax.ToNextWord(); |
SavedPos = m_Syntax.SavePos(); |
FX_BOOL bFirstItem = FALSE; |
int32_t recordsize = 20; |
- if (bFirst) { |
+ if (bFirst) |
bFirstItem = TRUE; |
- } |
m_dwXrefStartObjNum = start_objnum; |
if (!bSkip) { |
char* pBuf = FX_Alloc(char, 1024 * recordsize + 1); |
@@ -562,7 +559,7 @@ FX_BOOL CPDF_Parser::LoadCrossRefV4(FX_FILESIZE pos, |
for (int32_t c = 0; c < 10; c++) { |
if (pEntry[c] < '0' || pEntry[c] > '9') { |
FX_Free(pBuf); |
- return FALSE; |
+ return false; |
} |
} |
} |
@@ -572,14 +569,9 @@ FX_BOOL CPDF_Parser::LoadCrossRefV4(FX_FILESIZE pos, |
m_bVersionUpdated = TRUE; |
} |
m_ObjVersion.SetAtGrow(objnum, version); |
- if (m_CrossRef[objnum] < m_Syntax.m_FileLen) { |
- void* pResult = |
- FXSYS_bsearch(&m_CrossRef[objnum], m_SortedOffset.GetData(), |
- m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), |
- _CompareFileSize); |
- if (pResult == NULL) { |
- m_SortedOffset.Add(m_CrossRef[objnum]); |
- } |
+ if (m_CrossRef[objnum] < m_Syntax.m_FileLen && |
+ !FindPosInOffsets(m_CrossRef[objnum])) { |
+ m_SortedOffset.Add(m_CrossRef[objnum]); |
} |
m_V5Type.SetAtGrow(objnum, 1); |
} |
@@ -592,12 +584,9 @@ FX_BOOL CPDF_Parser::LoadCrossRefV4(FX_FILESIZE pos, |
} |
m_Syntax.RestorePos(SavedPos + count * recordsize); |
} |
- if (streampos) |
- if (!LoadCrossRefV5(streampos, streampos, FALSE)) { |
- return FALSE; |
- } |
- return TRUE; |
+ return !streampos || LoadCrossRefV5(streampos, streampos, FALSE); |
} |
+ |
FX_BOOL CPDF_Parser::LoadAllCrossRefV5(FX_FILESIZE xrefpos) { |
if (!LoadCrossRefV5(xrefpos, xrefpos, TRUE)) { |
return FALSE; |
@@ -772,7 +761,7 @@ FX_BOOL CPDF_Parser::RebuildCrossRef() { |
void* pResult = |
FXSYS_bsearch(&obj_pos, m_SortedOffset.GetData(), |
m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), |
- _CompareFileSize); |
+ CompareFileSize); |
if (pResult == NULL) { |
m_SortedOffset.Add(obj_pos); |
} |
@@ -990,20 +979,14 @@ FX_BOOL CPDF_Parser::RebuildCrossRef() { |
FX_FILESIZE offset = last_trailer - m_Syntax.m_HeaderOffset; |
void* pResult = |
FXSYS_bsearch(&offset, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), |
- sizeof(FX_FILESIZE), _CompareFileSize); |
+ sizeof(FX_FILESIZE), CompareFileSize); |
if (pResult == NULL) { |
m_SortedOffset.Add(offset); |
} |
FX_Free(buffer); |
return TRUE; |
} |
-static FX_DWORD _GetVarInt(const uint8_t* p, int32_t n) { |
- FX_DWORD result = 0; |
- for (int32_t i = 0; i < n; i++) { |
- result = result * 256 + p[i]; |
- } |
- return result; |
-} |
+ |
FX_BOOL CPDF_Parser::LoadCrossRefV5(FX_FILESIZE pos, |
FX_FILESIZE& prev, |
FX_BOOL bMainXRef) { |
@@ -1110,15 +1093,15 @@ FX_BOOL CPDF_Parser::LoadCrossRefV5(FX_FILESIZE pos, |
int32_t type = 1; |
const uint8_t* entrystart = segstart + j * totalWidth; |
if (WidthArray[0]) { |
- type = _GetVarInt(entrystart, WidthArray[0]); |
+ type = GetVarInt(entrystart, WidthArray[0]); |
} |
if (m_V5Type[startnum + j] == 255) { |
FX_FILESIZE offset = |
- _GetVarInt(entrystart + WidthArray[0], WidthArray[1]); |
+ GetVarInt(entrystart + WidthArray[0], WidthArray[1]); |
m_CrossRef[startnum + j] = offset; |
void* pResult = FXSYS_bsearch(&offset, m_SortedOffset.GetData(), |
m_SortedOffset.GetSize(), |
- sizeof(FX_FILESIZE), _CompareFileSize); |
+ sizeof(FX_FILESIZE), CompareFileSize); |
if (pResult == NULL) { |
m_SortedOffset.Add(offset); |
} |
@@ -1132,12 +1115,12 @@ FX_BOOL CPDF_Parser::LoadCrossRefV5(FX_FILESIZE pos, |
m_CrossRef[startnum + j] = 0; |
} else { |
FX_FILESIZE offset = |
- _GetVarInt(entrystart + WidthArray[0], WidthArray[1]); |
+ GetVarInt(entrystart + WidthArray[0], WidthArray[1]); |
m_CrossRef[startnum + j] = offset; |
if (type == 1) { |
void* pResult = FXSYS_bsearch(&offset, m_SortedOffset.GetData(), |
m_SortedOffset.GetSize(), |
- sizeof(FX_FILESIZE), _CompareFileSize); |
+ sizeof(FX_FILESIZE), CompareFileSize); |
if (pResult == NULL) { |
m_SortedOffset.Add(offset); |
} |
@@ -1199,7 +1182,7 @@ FX_BOOL CPDF_Parser::IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) { |
FX_FILESIZE pos = m_CrossRef[objnum]; |
void* pResult = |
FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), |
- sizeof(FX_FILESIZE), _CompareFileSize); |
+ sizeof(FX_FILESIZE), CompareFileSize); |
if (pResult == NULL) { |
return TRUE; |
} |
@@ -1282,7 +1265,7 @@ FX_FILESIZE CPDF_Parser::GetObjectSize(FX_DWORD objnum) { |
} |
void* pResult = FXSYS_bsearch(&offset, m_SortedOffset.GetData(), |
m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), |
- _CompareFileSize); |
+ CompareFileSize); |
if (pResult == NULL) { |
return 0; |
} |
@@ -1363,7 +1346,7 @@ void CPDF_Parser::GetIndirectBinary(FX_DWORD objnum, |
} |
void* pResult = |
FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), |
- sizeof(FX_FILESIZE), _CompareFileSize); |
+ sizeof(FX_FILESIZE), CompareFileSize); |
if (pResult == NULL) { |
m_Syntax.RestorePos(SavedPos); |
return; |
@@ -1642,7 +1625,7 @@ FX_DWORD CPDF_Parser::StartAsynParse(IFX_FileRead* pFileAccess, |
} |
} |
FXSYS_qsort(m_SortedOffset.GetData(), m_SortedOffset.GetSize(), |
- sizeof(FX_FILESIZE), _CompareFileSize); |
+ sizeof(FX_FILESIZE), CompareFileSize); |
FX_DWORD RootObjNum = GetRootObjNum(); |
if (RootObjNum == 0) { |
ReleaseEncryptHandler(); |
@@ -1714,7 +1697,7 @@ FX_DWORD CPDF_Parser::LoadLinearizedMainXRefTable() { |
return PDFPARSE_ERROR_FORMAT; |
} |
FXSYS_qsort(m_SortedOffset.GetData(), m_SortedOffset.GetSize(), |
- sizeof(FX_FILESIZE), _CompareFileSize); |
+ sizeof(FX_FILESIZE), CompareFileSize); |
m_Syntax.m_MetadataObjnum = dwSaveMetadataObjnum; |
return PDFPARSE_ERROR_SUCCESS; |
} |
@@ -1735,13 +1718,13 @@ CPDF_SyntaxParser::CPDF_SyntaxParser() { |
CPDF_SyntaxParser::~CPDF_SyntaxParser() { |
FX_Free(m_pFileBuf); |
} |
+ |
FX_BOOL CPDF_SyntaxParser::GetCharAt(FX_FILESIZE pos, uint8_t& ch) { |
- FX_FILESIZE save_pos = m_Pos; |
+ CFX_AutoRestorer<FX_FILESIZE> save_pos(&m_Pos); |
m_Pos = pos; |
- FX_BOOL ret = GetNextChar(ch); |
- m_Pos = save_pos; |
- return ret; |
+ return GetNextChar(ch); |
} |
+ |
FX_BOOL CPDF_SyntaxParser::GetNextChar(uint8_t& ch) { |
FX_FILESIZE pos = m_Pos + m_HeaderOffset; |
if (pos >= m_FileLen) { |
@@ -2690,76 +2673,67 @@ FX_BOOL CPDF_SyntaxParser::SearchWord(const CFX_ByteStringC& tag, |
} |
return FALSE; |
} |
+ |
struct _SearchTagRecord { |
const uint8_t* m_pTag; |
FX_DWORD m_Len; |
FX_DWORD m_Offset; |
}; |
+ |
int32_t CPDF_SyntaxParser::SearchMultiWord(const CFX_ByteStringC& tags, |
FX_BOOL bWholeWord, |
FX_FILESIZE limit) { |
- int32_t ntags = 1, i; |
- for (i = 0; i < tags.GetLength(); i++) |
+ int32_t ntags = 1; |
+ for (int i = 0; i < tags.GetLength(); ++i) { |
if (tags[i] == 0) { |
- ntags++; |
+ ++ntags; |
} |
- _SearchTagRecord* pPatterns = FX_Alloc(_SearchTagRecord, ntags); |
- FX_DWORD start = 0, itag = 0, max_len = 0; |
- for (i = 0; i <= tags.GetLength(); i++) { |
+ } |
+ |
+ std::vector<_SearchTagRecord> patterns(ntags); |
+ FX_DWORD start = 0; |
+ FX_DWORD itag = 0; |
+ FX_DWORD max_len = 0; |
+ for (int i = 0; i <= tags.GetLength(); ++i) { |
if (tags[i] == 0) { |
FX_DWORD len = i - start; |
- if (len > max_len) { |
- max_len = len; |
- } |
- pPatterns[itag].m_pTag = tags.GetPtr() + start; |
- pPatterns[itag].m_Len = len; |
- pPatterns[itag].m_Offset = 0; |
+ max_len = std::max(len, max_len); |
+ patterns[itag].m_pTag = tags.GetPtr() + start; |
+ patterns[itag].m_Len = len; |
+ patterns[itag].m_Offset = 0; |
start = i + 1; |
- itag++; |
+ ++itag; |
} |
} |
- FX_FILESIZE pos = m_Pos; |
- uint8_t byte; |
- GetCharAt(pos++, byte); |
- int32_t found = -1; |
- while (1) { |
- for (i = 0; i < ntags; i++) { |
- if (pPatterns[i].m_pTag[pPatterns[i].m_Offset] == byte) { |
- pPatterns[i].m_Offset++; |
- if (pPatterns[i].m_Offset == pPatterns[i].m_Len) { |
- if (!bWholeWord || |
- IsWholeWord(pos - pPatterns[i].m_Len, limit, pPatterns[i].m_pTag, |
- pPatterns[i].m_Len, FALSE)) { |
- found = i; |
- goto end; |
- } else { |
- if (pPatterns[i].m_pTag[0] == byte) { |
- pPatterns[i].m_Offset = 1; |
- } else { |
- pPatterns[i].m_Offset = 0; |
- } |
- } |
- } |
- } else { |
- if (pPatterns[i].m_pTag[0] == byte) { |
- pPatterns[i].m_Offset = 1; |
- } else { |
- pPatterns[i].m_Offset = 0; |
- } |
+ |
+ const FX_FILESIZE pos_limit = m_Pos + limit; |
+ for (FX_FILESIZE pos = m_Pos; !limit || pos < pos_limit; ++pos) { |
+ uint8_t byte; |
+ if (!GetCharAt(pos, byte)) |
+ break; |
+ |
+ for (int i = 0; i < ntags; ++i) { |
+ _SearchTagRecord& pat = patterns[i]; |
+ if (pat.m_pTag[pat.m_Offset] != byte) { |
+ pat.m_Offset = (pat.m_pTag[0] == byte) ? 1 : 0; |
+ continue; |
} |
+ |
+ ++pat.m_Offset; |
+ if (pat.m_Offset != pat.m_Len) |
+ continue; |
+ |
+ if (!bWholeWord || |
+ IsWholeWord(pos - pat.m_Len, limit, pat.m_pTag, pat.m_Len, FALSE)) { |
+ return i; |
+ } |
+ |
+ pat.m_Offset = (pat.m_pTag[0] == byte) ? 1 : 0; |
} |
- if (limit && pos >= m_Pos + limit) { |
- goto end; |
- } |
- if (!GetCharAt(pos, byte)) { |
- goto end; |
- } |
- pos++; |
} |
-end: |
- FX_Free(pPatterns); |
- return found; |
+ return -1; |
} |
+ |
FX_FILESIZE CPDF_SyntaxParser::FindTag(const CFX_ByteStringC& tag, |
FX_FILESIZE limit) { |
int32_t taglen = tag.GetLength(); |
@@ -2804,20 +2778,19 @@ class CPDF_DataAvail final : public IPDF_DataAvail { |
CPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead); |
~CPDF_DataAvail() override; |
- virtual FX_BOOL IsDocAvail(IFX_DownloadHints* pHints) override; |
+ FX_BOOL IsDocAvail(IFX_DownloadHints* pHints) override; |
- virtual void SetDocument(CPDF_Document* pDoc) override; |
+ void SetDocument(CPDF_Document* pDoc) override; |
- virtual FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints) override; |
+ FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints) override; |
- virtual int32_t IsFormAvail(IFX_DownloadHints* pHints) override; |
+ int32_t IsFormAvail(IFX_DownloadHints* pHints) override; |
- virtual int32_t IsLinearizedPDF() override; |
+ int32_t IsLinearizedPDF() override; |
- virtual FX_BOOL IsLinearized() override { return m_bLinearized; } |
+ FX_BOOL IsLinearized() override { return m_bLinearized; } |
- virtual void GetLinearizedMainXRefInfo(FX_FILESIZE* pPos, |
- FX_DWORD* pSize) override; |
+ void GetLinearizedMainXRefInfo(FX_FILESIZE* pPos, FX_DWORD* pSize) override; |
protected: |
static const int kMaxDataAvailRecursionDepth = 64; |
@@ -3097,7 +3070,7 @@ FX_DWORD CPDF_DataAvail::GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset) { |
} |
void* pResult = FXSYS_bsearch(&offset, pParser->m_SortedOffset.GetData(), |
pParser->m_SortedOffset.GetSize(), |
- sizeof(FX_FILESIZE), _CompareFileSize); |
+ sizeof(FX_FILESIZE), CompareFileSize); |
if (pResult == NULL) { |
return 0; |
} |
@@ -3349,7 +3322,7 @@ FX_BOOL CPDF_DataAvail::LoadAllXref(IFX_DownloadHints* pHints) { |
} |
FXSYS_qsort(m_parser.m_SortedOffset.GetData(), |
m_parser.m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), |
- _CompareFileSize); |
+ CompareFileSize); |
m_dwRootObjNum = m_parser.GetRootObjNum(); |
m_dwInfoObjNum = m_parser.GetInfoObjNum(); |
m_pCurrentParser = &m_parser; |