summaryrefslogtreecommitdiff
path: root/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp')
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp69
1 files changed, 16 insertions, 53 deletions
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
index e6e2f2aabe..d1a7231d45 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
@@ -65,11 +65,13 @@ CPDF_SimpleParser::CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize) {
m_dwSize = dwSize;
m_dwCurPos = 0;
}
+
CPDF_SimpleParser::CPDF_SimpleParser(const CFX_ByteStringC& str) {
m_pData = str.GetPtr();
m_dwSize = str.GetLength();
m_dwCurPos = 0;
}
+
void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize) {
pStart = NULL;
dwSize = 0;
@@ -146,6 +148,7 @@ void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize) {
dwSize++;
}
}
+
CFX_ByteStringC CPDF_SimpleParser::GetWord() {
const uint8_t* pStart;
FX_DWORD dwSize;
@@ -190,60 +193,14 @@ CFX_ByteStringC CPDF_SimpleParser::GetWord() {
}
return CFX_ByteStringC(pStart, dwSize);
}
-FX_BOOL CPDF_SimpleParser::SearchToken(const CFX_ByteStringC& token) {
- int token_len = token.GetLength();
- while (m_dwCurPos < m_dwSize - token_len) {
- if (FXSYS_memcmp(m_pData + m_dwCurPos, token.GetPtr(), token_len) == 0) {
- break;
- }
- m_dwCurPos++;
- }
- if (m_dwCurPos == m_dwSize - token_len) {
- return FALSE;
- }
- m_dwCurPos += token_len;
- return TRUE;
-}
-FX_BOOL CPDF_SimpleParser::SkipWord(const CFX_ByteStringC& token) {
- while (1) {
- CFX_ByteStringC word = GetWord();
- if (word.IsEmpty()) {
- return FALSE;
- }
- if (word == token) {
- return TRUE;
- }
- }
- return FALSE;
-}
-FX_BOOL CPDF_SimpleParser::FindTagPair(const CFX_ByteStringC& start_token,
- const CFX_ByteStringC& end_token,
- FX_DWORD& start_pos,
- FX_DWORD& end_pos) {
- if (!start_token.IsEmpty()) {
- if (!SkipWord(start_token)) {
- return FALSE;
- }
- start_pos = m_dwCurPos;
- }
- while (1) {
- end_pos = m_dwCurPos;
- CFX_ByteStringC word = GetWord();
- if (word.IsEmpty()) {
- return FALSE;
- }
- if (word == end_token) {
- return TRUE;
- }
- }
- return FALSE;
-}
-FX_BOOL CPDF_SimpleParser::FindTagParam(const CFX_ByteStringC& token,
- int nParams) {
+
+bool CPDF_SimpleParser::FindTagParamFromStart(const CFX_ByteStringC& token,
+ int nParams) {
nParams++;
FX_DWORD* pBuf = FX_Alloc(FX_DWORD, nParams);
int buf_index = 0;
int buf_count = 0;
+ m_dwCurPos = 0;
while (1) {
pBuf[buf_index++] = m_dwCurPos;
if (buf_index == nParams) {
@@ -256,7 +213,7 @@ FX_BOOL CPDF_SimpleParser::FindTagParam(const CFX_ByteStringC& token,
CFX_ByteStringC word = GetWord();
if (word.IsEmpty()) {
FX_Free(pBuf);
- return FALSE;
+ return false;
}
if (word == token) {
if (buf_count < nParams) {
@@ -264,10 +221,10 @@ FX_BOOL CPDF_SimpleParser::FindTagParam(const CFX_ByteStringC& token,
}
m_dwCurPos = pBuf[buf_index];
FX_Free(pBuf);
- return TRUE;
+ return true;
}
}
- return FALSE;
+ return false;
}
CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& bstr) {
@@ -291,12 +248,14 @@ CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& bstr) {
result.ReleaseBuffer((FX_STRSIZE)(pDest - pDestStart));
return result;
}
+
CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig) {
if (!FXSYS_memchr(orig.c_str(), '#', orig.GetLength())) {
return orig;
}
return PDF_NameDecode(CFX_ByteStringC(orig));
}
+
CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig) {
uint8_t* src_buf = (uint8_t*)orig.c_str();
int src_len = orig.GetLength();
@@ -332,6 +291,7 @@ CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig) {
res.ReleaseBuffer();
return res;
}
+
CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj) {
if (!pObj) {
buf << " null";
@@ -402,6 +362,7 @@ CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj) {
}
return buf;
}
+
FX_FLOAT PDF_ClipFloat(FX_FLOAT f) {
if (f < 0) {
return 0;
@@ -411,6 +372,7 @@ FX_FLOAT PDF_ClipFloat(FX_FLOAT f) {
}
return f;
}
+
static CPDF_Object* SearchNumberNode(CPDF_Dictionary* pNode, int num) {
CPDF_Array* pLimits = pNode->GetArrayBy("Limits");
if (pLimits &&
@@ -447,6 +409,7 @@ static CPDF_Object* SearchNumberNode(CPDF_Dictionary* pNode, int num) {
}
return NULL;
}
+
CPDF_Object* CPDF_NumberTree::LookupValue(int num) {
return SearchNumberNode(m_pRoot, num);
}