[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