aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2005-02-22 18:11:36 +0000
committerMax Horn2005-02-22 18:11:36 +0000
commit039b2b3a200c07963533c9db7cf6837fd77f4c9e (patch)
tree14d47b1059cf0908256b914b2482e1f0d061a5a8
parent457ee7f58252d1e86bd2404dbb823968bfbaaea7 (diff)
downloadscummvm-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
-rw-r--r--common/config-manager.cpp17
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);
}