Skip to content

Commit

Permalink
Merge pull request #13279 from jordan-woyak/delimited-token
Browse files Browse the repository at this point in the history
InputCommon/ExpressionParser: Require delimited tokens actually have their terminating delimiter.
  • Loading branch information
Tilka authored Jan 20, 2025
2 parents 761e65e + 78bb30d commit 510a688
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 8 deletions.
17 changes: 10 additions & 7 deletions Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,15 @@ Lexer::Lexer(std::string expr_) : expr(std::move(expr_))
it = expr.begin();
}

std::string Lexer::FetchDelimString(char delim)
Token Lexer::GetDelimitedToken(TokenType type, char delimeter)
{
const std::string result = FetchCharsWhile([delim](char c) { return c != delim; });
if (it != expr.end())
++it;
return result;
const std::string value = FetchCharsWhile([&](char c) { return c != delimeter && c != '\n'; });

if (it == expr.end() || *it != delimeter)
return Token(TOK_INVALID);

++it;
return Token(type, value);
}

std::string Lexer::FetchWordChars()
Expand All @@ -110,7 +113,7 @@ std::string Lexer::FetchWordChars()

Token Lexer::GetDelimitedLiteral()
{
return Token(TOK_LITERAL, FetchDelimString('\''));
return GetDelimitedToken(TOK_LITERAL, '\'');
}

Token Lexer::GetVariable()
Expand All @@ -120,7 +123,7 @@ Token Lexer::GetVariable()

Token Lexer::GetFullyQualifiedControl()
{
return Token(TOK_CONTROL, FetchDelimString('`'));
return GetDelimitedToken(TOK_CONTROL, '`');
}

Token Lexer::GetBareword(char first_char)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ class Lexer
return value;
}

std::string FetchDelimString(char delim);
std::string FetchWordChars();
Token GetDelimitedToken(TokenType type, char delimeter);
Token GetDelimitedLiteral();
Token GetVariable();
Token GetFullyQualifiedControl();
Expand Down

0 comments on commit 510a688

Please sign in to comment.