diff options
author | Max Horn | 2005-02-22 18:11:36 +0000 |
---|---|---|
committer | Max Horn | 2005-02-22 18:11:36 +0000 |
commit | 039b2b3a200c07963533c9db7cf6837fd77f4c9e (patch) | |
tree | 14d47b1059cf0908256b914b2482e1f0d061a5a8 /common | |
parent | 457ee7f58252d1e86bd2404dbb823968bfbaaea7 (diff) | |
download | scummvm-rg350-039b2b3a200c07963533c9db7cf6837fd77f4c9e.tar.gz scummvm-rg350-039b2b3a200c07963533c9db7cf6837fd77f4c9e.tar.bz2 scummvm-rg350-039b2b3a200c07963533c9db7cf6837fd77f4c9e.zip |
Verify domain names as they are passed into the config manager (better to crash here, early, than to corrupt a user's config file)
svn-id: r16862
Diffstat (limited to 'common')
-rw-r--r-- | common/config-manager.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/common/config-manager.cpp b/common/config-manager.cpp index 8e98f374cd..d1aff130c0 100644 --- a/common/config-manager.cpp +++ b/common/config-manager.cpp @@ -52,6 +52,13 @@ static char *rtrim(char *t) { return t; } +static bool isValidDomainName(const Common::String &domain) { + const char *p = domain.c_str(); + while (*p && (isalnum(*p) || *p == '-' || *p == '_')) + p++; + return *p == 0; +} + namespace Common { const String ConfigManager::kApplicationDomain("scummvm"); @@ -293,6 +300,7 @@ bool ConfigManager::hasKey(const String &key) const { bool ConfigManager::hasKey(const String &key, const String &dom) const { assert(!dom.isEmpty()); + assert(isValidDomainName(dom)); if (dom == kTransientDomain) return _transientDomain.contains(key); @@ -306,6 +314,7 @@ bool ConfigManager::hasKey(const String &key, const String &dom) const { void ConfigManager::removeKey(const String &key, const String &dom) { assert(!dom.isEmpty()); + assert(isValidDomainName(dom)); if (dom == kTransientDomain) _transientDomain.remove(key); @@ -322,6 +331,8 @@ void ConfigManager::removeKey(const String &key, const String &dom) { const String & ConfigManager::get(const String &key, const String &domain) const { + assert(isValidDomainName(domain)); + // Search the domains in the following order: // 1) Transient domain // 2) Active game domain (if any) @@ -379,6 +390,7 @@ bool ConfigManager::getBool(const String &key, const String &dom) const { void ConfigManager::set(const String &key, const String &value, const String &dom) { + assert(isValidDomainName(dom)); if (dom.isEmpty()) { // Remove the transient domain value _transientDomain.remove(key); @@ -448,12 +460,14 @@ void ConfigManager::registerDefault(const String &key, bool value) { void ConfigManager::setActiveDomain(const String &domain) { assert(!domain.isEmpty()); + assert(isValidDomainName(domain)); _activeDomain = domain; _gameDomains.addKey(domain); } void ConfigManager::removeGameDomain(const String &domain) { assert(!domain.isEmpty()); + assert(isValidDomainName(domain)); _gameDomains.remove(domain); } @@ -463,6 +477,8 @@ void ConfigManager::renameGameDomain(const String &oldName, const String &newNam assert(!oldName.isEmpty()); assert(!newName.isEmpty()); + assert(isValidDomainName(oldName)); + assert(isValidDomainName(newName)); _gameDomains[newName].merge(_gameDomains[oldName]); @@ -471,6 +487,7 @@ void ConfigManager::renameGameDomain(const String &oldName, const String &newNam bool ConfigManager::hasGameDomain(const String &domain) const { assert(!domain.isEmpty()); + assert(isValidDomainName(domain)); return _gameDomains.contains(domain); } |