Assert that type identifier contains only valid characters

This commit is contained in:
Alex Beregszaszi 2018-08-07 22:29:21 +01:00
parent a99347e9f0
commit 3064bd17bc
2 changed files with 12 additions and 1 deletions

View File

@ -254,6 +254,17 @@ string Type::escapeIdentifier(string const& _identifier)
return ret;
}
string Type::identifier() const
{
string ret = escapeIdentifier(richIdentifier());
solAssert(ret.find_first_of("0123456789") != 0, "Identifier cannot start with a number.");
solAssert(
ret.find_first_not_of("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMONPQRSTUVWXYZ_$") == string::npos,
"Identifier contains invalid characters."
);
return ret;
}
TypePointer Type::fromElementaryTypeName(ElementaryTypeNameToken const& _type)
{
solAssert(Token::isElementaryTypeName(_type.token()),

View File

@ -172,7 +172,7 @@ public:
/// only if they have the same identifier.
/// The identifier should start with "t_".
/// Will not contain any character which would be invalid as an identifier.
std::string identifier() const { return escapeIdentifier(richIdentifier()); }
std::string identifier() const;
/// More complex identifier strings use "parentheses", where $_ is interpreted as as
/// "opening parenthesis", _$ as "closing parenthesis", _$_ as "comma" and any $ that