# HG changeset patch # User frosch # Date 2014-01-02 17:55:57 # Node ID 652ccbb04bc8b2bc5b5ddd514775906fe029b791 # Parent bf4cad9f8d6f94030e17f1bcea92534fe1eeae13 (svn r26206) -Fix [FS#5829]: Run everything from ini, obg, obs, obs, ... files through str_validate. diff --git a/src/ini_load.cpp b/src/ini_load.cpp --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -26,6 +26,8 @@ IniItem::IniItem(IniGroup *parent, const if (len == 0) len = strlen(name); this->name = strndup(name, len); + if (this->name != NULL) str_validate(this->name, this->name + len); + *parent->last_item = this; parent->last_item = &this->next; } @@ -61,6 +63,8 @@ IniGroup::IniGroup(IniLoadFile *parent, if (len == 0) len = strlen(name); this->name = strndup(name, len); + if (this->name != NULL) str_validate(this->name, this->name + len); + this->last_item = &this->item; *parent->last_group = this; parent->last_group = &this->next; @@ -305,6 +309,7 @@ void IniLoadFile::LoadFromDisk(const cha /* If the value was not quoted and empty, it must be NULL */ item->value = (!quoted && e == t) ? NULL : strndup(t, e - t); + if (item->value != NULL) str_validate(item->value, item->value + strlen(item->value)); } else { /* it's an orphan item */ this->ReportFileError("ini: '", buffer, "' outside of group"); diff --git a/src/table/gameopt_settings.ini b/src/table/gameopt_settings.ini --- a/src/table/gameopt_settings.ini +++ b/src/table/gameopt_settings.ini @@ -29,15 +29,15 @@ static const char *_settings_profiles = static const char *_news_display = "off|summarized|full"; static const SettingDesc _gameopt_settings[] = { - /* In version 4 a new difficulty setting has been added to the difficulty settings, - * town attitude towards demolishing. Needs special handling because some dimwit thought - * it funny to have the GameDifficulty struct be an array while it is a struct of - * same-sized members - * XXX - To save file-space and since values are never bigger than about 10? only - * save the first 16 bits in the savegame. Question is why the values are still int32 - * and why not byte for example? - * 'SLE_FILE_I16 | SLE_VAR_U16' in "diff_custom" is needed to get around SlArray() hack - * for savegames version 0 - though it is an array, it has to go through the byteswap process */ +/* In version 4 a new difficulty setting has been added to the difficulty settings, + * town attitude towards demolishing. Needs special handling because some dimwit thought + * it funny to have the GameDifficulty struct be an array while it is a struct of + * same-sized members + * XXX - To save file-space and since values are never bigger than about 10? only + * save the first 16 bits in the savegame. Question is why the values are still int32 + * and why not byte for example? + * 'SLE_FILE_I16 | SLE_VAR_U16' in "diff_custom" is needed to get around SlArray() hack + * for savegames version 0 - though it is an array, it has to go through the byteswap process */ [post-amble] }; [templates]