Return a bool from CPDF_SyntaxParser::GetNextWordInternal().
Instead of writing to an out parameter.
Change-Id: Iedae0574cd4714b535cfe0d066a915cef096c317
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/85975
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index d29b8ce..334fab5 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -172,29 +172,27 @@
return true;
}
-void CPDF_SyntaxParser::GetNextWordInternal(bool* bIsNumber) {
+CPDF_SyntaxParser::WordType CPDF_SyntaxParser::GetNextWordInternal() {
m_WordSize = 0;
- if (bIsNumber)
- *bIsNumber = true;
+ WordType word_type = WordType::kNumber;
ToNextWord();
uint8_t ch;
if (!GetNextChar(ch))
- return;
+ return word_type;
if (PDFCharIsDelimiter(ch)) {
- if (bIsNumber)
- *bIsNumber = false;
+ word_type = WordType::kWord;
m_WordBuffer[m_WordSize++] = ch;
if (ch == '/') {
while (1) {
if (!GetNextChar(ch))
- return;
+ return word_type;
if (!PDFCharIsOther(ch) && !PDFCharIsNumeric(ch)) {
m_Pos--;
- return;
+ return word_type;
}
if (m_WordSize < sizeof(m_WordBuffer) - 1)
@@ -202,7 +200,7 @@
}
} else if (ch == '<') {
if (!GetNextChar(ch))
- return;
+ return word_type;
if (ch == '<')
m_WordBuffer[m_WordSize++] = ch;
@@ -210,33 +208,32 @@
m_Pos--;
} else if (ch == '>') {
if (!GetNextChar(ch))
- return;
+ return word_type;
if (ch == '>')
m_WordBuffer[m_WordSize++] = ch;
else
m_Pos--;
}
- return;
+ return word_type;
}
while (1) {
if (m_WordSize < sizeof(m_WordBuffer) - 1)
m_WordBuffer[m_WordSize++] = ch;
- if (!PDFCharIsNumeric(ch)) {
- if (bIsNumber)
- *bIsNumber = false;
- }
+ if (!PDFCharIsNumeric(ch))
+ word_type = WordType::kWord;
if (!GetNextChar(ch))
- return;
+ return word_type;
if (PDFCharIsDelimiter(ch) || PDFCharIsWhitespace(ch)) {
m_Pos--;
break;
}
}
+ return word_type;
}
ByteString CPDF_SyntaxParser::ReadString() {
@@ -469,7 +466,9 @@
ByteString CPDF_SyntaxParser::GetNextWord(bool* bIsNumber) {
CPDF_ReadValidator::ScopedSession read_session(GetValidator());
- GetNextWordInternal(bIsNumber);
+ WordType word_type = GetNextWordInternal();
+ if (bIsNumber)
+ *bIsNumber = word_type == WordType::kNumber;
ByteString ret;
if (!GetValidator()->has_read_problems())
ret = ByteString(m_WordBuffer, m_WordSize);
@@ -750,7 +749,7 @@
CPDF_ReadValidator::ScopedSession read_session(GetValidator());
m_Pos += ReadEOLMarkers(GetPos());
memset(m_WordBuffer, 0, kEndStreamStr.GetLength() + 1);
- GetNextWordInternal(nullptr);
+ GetNextWordInternal();
if (GetValidator()->has_read_problems())
return nullptr;
@@ -800,7 +799,7 @@
}
const FX_FILESIZE end_stream_offset = GetPos();
memset(m_WordBuffer, 0, kEndObjStr.GetLength() + 1);
- GetNextWordInternal(nullptr);
+ GetNextWordInternal();
// Allow whitespace after endstream and before a newline.
unsigned char ch = 0;
@@ -820,9 +819,7 @@
}
uint32_t CPDF_SyntaxParser::GetDirectNum() {
- bool bIsNumber;
- GetNextWordInternal(&bIsNumber);
- if (!bIsNumber)
+ if (GetNextWordInternal() != WordType::kNumber)
return 0;
m_WordBuffer[m_WordSize] = 0;
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.h b/core/fpdfapi/parser/cpdf_syntax_parser.h
index 35610f6..abcb50e 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.h
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.h
@@ -86,6 +86,8 @@
}
private:
+ enum class WordType : bool { kWord, kNumber };
+
friend class CPDF_DataAvail;
friend class cpdf_syntax_parser_ReadHexString_Test;
@@ -94,7 +96,7 @@
bool ReadBlockAt(FX_FILESIZE read_pos);
bool GetCharAtBackward(FX_FILESIZE pos, uint8_t* ch);
- void GetNextWordInternal(bool* bIsNumber);
+ WordType GetNextWordInternal();
bool IsWholeWord(FX_FILESIZE startpos,
FX_FILESIZE limit,
ByteStringView tag,