[Scummvm-cvs-logs] CVS: scummvm/common config-manager.cpp,1.30,1.31
Max Horn
fingolfin at users.sourceforge.net
Tue Feb 22 10:14:55 CET 2005
Update of /cvsroot/scummvm/scummvm/common
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7406
Modified Files:
config-manager.cpp
Log Message:
Verify domain names as they are passed into the config manager (better to crash here, early, than to corrupt a user's config file)
Index: config-manager.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/config-manager.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- config-manager.cpp 10 Jan 2005 22:35:43 -0000 1.30
+++ config-manager.cpp 22 Feb 2005 18:11:36 -0000 1.31
@@ -52,6 +52,13 @@
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 String &dom) const {
assert(!dom.isEmpty());
+ assert(isValidDomainName(dom));
if (dom == kTransientDomain)
return _transientDomain.contains(key);
@@ -306,6 +314,7 @@
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 @@
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 @@
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::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 @@
assert(!oldName.isEmpty());
assert(!newName.isEmpty());
+ assert(isValidDomainName(oldName));
+ assert(isValidDomainName(newName));
_gameDomains[newName].merge(_gameDomains[oldName]);
@@ -471,6 +487,7 @@
bool ConfigManager::hasGameDomain(const String &domain) const {
assert(!domain.isEmpty());
+ assert(isValidDomainName(domain));
return _gameDomains.contains(domain);
}
More information about the Scummvm-git-logs
mailing list