stats: ensure that stat names are valid

This commit is contained in:
Nathan Binkert 2011-04-20 19:07:46 -07:00
parent 6e9143d36d
commit 2342aa2ebb

View file

@ -138,9 +138,43 @@ Info::~Info()
{
}
bool
validateStatName(const string &name)
{
if (name.empty())
return false;
vector<string> vec;
tokenize(vec, name, '.');
vector<string>::const_iterator item = vec.begin();
while (item != vec.end()) {
if (item->empty())
return false;
string::const_iterator c = item->begin();
// The first character is different
if (!isalpha(*c) && *c != '_')
return false;
// The rest of the characters have different rules.
while (++c != item->end()) {
if (!isalnum(*c) && *c != '_')
return false;
}
++item;
}
return true;
}
void
Info::setName(const string &name)
{
if (!validateStatName(name))
panic("invalid stat name '%s'", name);
pair<NameMapType::iterator, bool> p =
nameMap().insert(make_pair(name, this));