diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/ini-file.cpp | 85 | ||||
| -rw-r--r-- | common/ini-file.h | 6 | 
2 files changed, 67 insertions, 24 deletions
| diff --git a/common/ini-file.cpp b/common/ini-file.cpp index d35c1e8d16..90d40b7c7d 100644 --- a/common/ini-file.cpp +++ b/common/ini-file.cpp @@ -28,19 +28,13 @@  namespace Common { -bool INIFile::isValidName(const String &name) { +bool INIFile::isValidName(const String &name) const {  	const char *p = name.c_str();  	while (*p && (isAlnum(*p) || *p == '-' || *p == '_' || *p == '.' || *p == ' '))  		p++;  	return *p == 0;  } -INIFile::INIFile() { -} - -INIFile::~INIFile() { -} -  void INIFile::clear() {  	_sections.clear();  } @@ -125,7 +119,10 @@ bool INIFile::loadFromStream(SeekableReadStream &stream) {  			section.comment = comment;  			comment.clear(); -			assert(isValidName(section.name)); +			if (!isValidName(section.name)) { +				warning("Invalid section name: %s", section.name.c_str()); +				return false; +			}  		} else {  			// This line should be a line with a 'key=value' pair, or an empty one. @@ -163,7 +160,10 @@ bool INIFile::loadFromStream(SeekableReadStream &stream) {  			kv.comment = comment;  			comment.clear(); -			assert(isValidName(kv.key)); +			if (!isValidName(kv.key)) { +				warning("Invalid key name: %s", kv.key.c_str()); +				return false; +			}  			section.keys.push_back(kv);  		} @@ -240,7 +240,11 @@ void INIFile::addSection(const String §ion) {  }  void INIFile::removeSection(const String §ion) { -	assert(isValidName(section)); +	if (!isValidName(section)) { +		warning("Invalid section name: %s", section.c_str()); +		return; +	} +  	for (List<Section>::iterator i = _sections.begin(); i != _sections.end(); ++i) {  		if (section.equalsIgnoreCase(i->name)) {  			_sections.erase(i); @@ -250,14 +254,25 @@ void INIFile::removeSection(const String §ion) {  }  bool INIFile::hasSection(const String §ion) const { -	assert(isValidName(section)); +	if (!isValidName(section)) { +		warning("Invalid section name: %s", section.c_str()); +		return false; +	} +  	const Section *s = getSection(section);  	return s != nullptr;  }  void INIFile::renameSection(const String &oldName, const String &newName) { -	assert(isValidName(oldName)); -	assert(isValidName(newName)); +	if (!isValidName(oldName)) { +		warning("Invalid section name: %s", oldName.c_str()); +		return; +	} + +	if (!isValidName(newName)) { +		warning("Invalid section name: %s", newName.c_str()); +		return; +	}  	Section *os = getSection(oldName);  	const Section *ns = getSection(newName); @@ -278,8 +293,15 @@ void INIFile::renameSection(const String &oldName, const String &newName) {  bool INIFile::hasKey(const String &key, const String §ion) const { -	assert(isValidName(key)); -	assert(isValidName(section)); +	if (!isValidName(key)) { +		warning("Invalid key name: %s", key.c_str()); +		return false; +	} + +	if (!isValidName(section)) { +		warning("Invalid section name: %s", section.c_str()); +		return false; +	}  	const Section *s = getSection(section);  	if (!s) @@ -288,8 +310,15 @@ bool INIFile::hasKey(const String &key, const String §ion) const {  }  void INIFile::removeKey(const String &key, const String §ion) { -	assert(isValidName(key)); -	assert(isValidName(section)); +	if (!isValidName(key)) { +		warning("Invalid key name: %s", key.c_str()); +		return; +	} + +	if (!isValidName(section)) { +		warning("Invalid section name: %s", section.c_str()); +		return; +	}  	Section *s = getSection(section);  	if (s) @@ -297,9 +326,15 @@ void INIFile::removeKey(const String &key, const String §ion) {  }  bool INIFile::getKey(const String &key, const String §ion, String &value) const { -	assert(isValidName(key)); -	assert(isValidName(section)); +	if (!isValidName(key)) { +		warning("Invalid key name: %s", key.c_str()); +		return false; +	} +	if (!isValidName(section)) { +		warning("Invalid section name: %s", section.c_str()); +		return false; +	}  	const Section *s = getSection(section);  	if (!s)  		return false; @@ -311,8 +346,16 @@ bool INIFile::getKey(const String &key, const String §ion, String &value) co  }  void INIFile::setKey(const String &key, const String §ion, const String &value) { -	assert(isValidName(key)); -	assert(isValidName(section)); +	if (!isValidName(key)) { +		warning("Invalid key name: %s", key.c_str()); +		return; +	} + +	if (!isValidName(section)) { +		warning("Invalid section name: %s", section.c_str()); +		return; +	} +  	// TODO: Verify that value is valid, too. In particular, it shouldn't  	// contain CR or LF... diff --git a/common/ini-file.h b/common/ini-file.h index f27a8b9425..98be1e08bb 100644 --- a/common/ini-file.h +++ b/common/ini-file.h @@ -77,8 +77,8 @@ public:  	typedef List<Section> SectionList;  public: -	INIFile(); -	~INIFile(); +	INIFile() {} +	~INIFile() {}  	// TODO: Maybe add a copy constructor etc.? @@ -88,7 +88,7 @@ public:  	 * underscores. In particular, white space and "#", "=", "[", "]"  	 * are not valid!  	 */ -	static bool isValidName(const String &name); +	bool isValidName(const String &name) const;  	/** Reset everything stored in this ini file. */  	void	clear(); | 
