summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_simple_parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/parser/cpdf_simple_parser.cpp')
-rw-r--r--core/fpdfapi/parser/cpdf_simple_parser.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/core/fpdfapi/parser/cpdf_simple_parser.cpp b/core/fpdfapi/parser/cpdf_simple_parser.cpp
index 5358b183d8..b49f8423c3 100644
--- a/core/fpdfapi/parser/cpdf_simple_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_simple_parser.cpp
@@ -14,17 +14,17 @@ CPDF_SimpleParser::CPDF_SimpleParser(const uint8_t* pData, uint32_t dwSize)
CPDF_SimpleParser::CPDF_SimpleParser(const ByteStringView& str)
: m_pData(str.raw_str()), m_dwSize(str.GetLength()), m_dwCurPos(0) {}
-void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, uint32_t& dwSize) {
- pStart = nullptr;
- dwSize = 0;
+std::pair<const uint8_t*, uint32_t> CPDF_SimpleParser::ParseWord() {
+ const uint8_t* pStart = nullptr;
+ uint8_t dwSize = 0;
uint8_t ch;
while (1) {
if (m_dwSize <= m_dwCurPos)
- return;
+ return std::make_pair(pStart, dwSize);
ch = m_pData[m_dwCurPos++];
while (PDFCharIsWhitespace(ch)) {
if (m_dwSize <= m_dwCurPos)
- return;
+ return std::make_pair(pStart, dwSize);
ch = m_pData[m_dwCurPos++];
}
@@ -33,7 +33,7 @@ void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, uint32_t& dwSize) {
while (1) {
if (m_dwSize <= m_dwCurPos)
- return;
+ return std::make_pair(pStart, dwSize);
ch = m_pData[m_dwCurPos++];
if (PDFCharIsLineEnding(ch))
break;
@@ -46,19 +46,19 @@ void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, uint32_t& dwSize) {
if (ch == '/') {
while (1) {
if (m_dwSize <= m_dwCurPos)
- return;
+ return std::make_pair(pStart, dwSize);
ch = m_pData[m_dwCurPos++];
if (!PDFCharIsOther(ch) && !PDFCharIsNumeric(ch)) {
m_dwCurPos--;
dwSize = m_dwCurPos - start_pos;
- return;
+ return std::make_pair(pStart, dwSize);
}
}
} else {
dwSize = 1;
if (ch == '<') {
if (m_dwSize <= m_dwCurPos)
- return;
+ return std::make_pair(pStart, dwSize);
ch = m_pData[m_dwCurPos++];
if (ch == '<')
dwSize = 2;
@@ -66,7 +66,7 @@ void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, uint32_t& dwSize) {
m_dwCurPos--;
} else if (ch == '>') {
if (m_dwSize <= m_dwCurPos)
- return;
+ return std::make_pair(pStart, dwSize);
ch = m_pData[m_dwCurPos++];
if (ch == '>')
dwSize = 2;
@@ -74,13 +74,13 @@ void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, uint32_t& dwSize) {
m_dwCurPos--;
}
}
- return;
+ return std::make_pair(pStart, dwSize);
}
dwSize = 1;
while (1) {
if (m_dwSize <= m_dwCurPos)
- return;
+ return std::make_pair(pStart, dwSize);
ch = m_pData[m_dwCurPos++];
if (PDFCharIsDelimiter(ch) || PDFCharIsWhitespace(ch)) {
@@ -89,12 +89,13 @@ void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, uint32_t& dwSize) {
}
dwSize++;
}
+ return std::make_pair(pStart, dwSize);
}
ByteStringView CPDF_SimpleParser::GetWord() {
const uint8_t* pStart;
uint32_t dwSize;
- ParseWord(pStart, dwSize);
+ std::tie(pStart, dwSize) = ParseWord();
if (dwSize == 1 && pStart[0] == '<') {
while (m_dwCurPos < m_dwSize && m_pData[m_dwCurPos] != '>') {
m_dwCurPos++;