changeset 14635:aa875b61d53a draft

(svn r19212) -Fix: base graphics set with an empty filename in the obg file caused segfaults
author yexo <yexo@openttd.org>
date Mon, 22 Feb 2010 20:18:59 +0000
parents bea83d45c292
children 24606c2e02f8
files src/base_media_base.h src/base_media_func.h src/gfxinit.cpp
diffstat 3 files changed, 5 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/base_media_base.h
+++ b/src/base_media_base.h
@@ -108,9 +108,10 @@
 	 * Read the set information from a loaded ini.
 	 * @param ini      the ini to read from
 	 * @param path     the path to this ini file (for filenames)
+	 * @param allow_empty_filename empty filenames are valid
 	 * @return true if loading was successful.
 	 */
-	bool FillSetDetails(IniFile *ini, const char *path);
+	bool FillSetDetails(IniFile *ini, const char *path, bool allow_empty_filename = true);
 
 	/**
 	 * Get the description for the given ISO code.
--- a/src/base_media_func.h
+++ b/src/base_media_func.h
@@ -30,7 +30,7 @@
 	}
 
 template <class T, size_t Tnum_files, Subdirectory Tsubdir>
-bool BaseSet<T, Tnum_files, Tsubdir>::FillSetDetails(IniFile *ini, const char *path)
+bool BaseSet<T, Tnum_files, Tsubdir>::FillSetDetails(IniFile *ini, const char *path, bool allow_empty_filename)
 {
 	memset(this, 0, sizeof(*this));
 
@@ -69,7 +69,7 @@
 		MD5File *file = &this->files[i];
 		/* Find the filename first. */
 		item = files->GetItem(BaseSet<T, Tnum_files, Tsubdir>::file_names[i], false);
-		if (item == NULL) {
+		if (item == NULL || (item->value == NULL && !allow_empty_filename)) {
 			DEBUG(grf, 0, "No " SET_TYPE " file for: %s", BaseSet<T, Tnum_files, Tsubdir>::file_names[i]);
 			return false;
 		}
--- a/src/gfxinit.cpp
+++ b/src/gfxinit.cpp
@@ -205,7 +205,7 @@
 
 bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path)
 {
-	bool ret = this->BaseSet<GraphicsSet, MAX_GFT, DATA_DIR>::FillSetDetails(ini, path);
+	bool ret = this->BaseSet<GraphicsSet, MAX_GFT, DATA_DIR>::FillSetDetails(ini, path, false);
 	if (ret) {
 		IniGroup *metadata = ini->GetGroup("metadata");
 		IniItem *item;