Add end state to text handler and use to ensure that in nextTokenType to stop an out of bounds access to m_databuffer

This commit is contained in:
James Graham
2023-03-15 11:55:50 +00:00
parent 76b04dcba9
commit 0d6a83b063
2 changed files with 7 additions and 2 deletions

View File

@@ -219,8 +219,12 @@ void TextHandler::next()
void TextHandler::nextTokenType()
{
if (m_nextTokenType == Type::Tag && getTagType() == QStringLiteral("code") && !isCloseTag()
&& m_dataBuffer.indexOf(QStringLiteral("</code>"), m_pos) != m_pos) {
if (m_pos >= m_dataBuffer.length()) {
// This is to stop the function accessing an index outside the length of
// m_dataBuffer during the final loop.
m_nextTokenType = Type::End;
} else if (m_nextTokenType == Type::Tag && getTagType() == QStringLiteral("code") && !isCloseTag()
&& m_dataBuffer.indexOf(QStringLiteral("</code>"), m_pos) != m_pos) {
m_nextTokenType = Type::TextCode;
} else if (m_dataBuffer[m_pos] == u'<' && m_dataBuffer[m_pos + 1] != u' ') {
m_nextTokenType = Type::Tag;

View File

@@ -48,6 +48,7 @@ public:
Text, /*!< Anything not a tag that doesn't have special handling */
Tag, /*!< For any generic tag that doesn't have special handling */
TextCode, /*!< Text between code tags */
End, /*!< End of the input string */
};
/**