(svn r27278) -Fix: Handle savegames with an unexpected amount of industry-builder or NewGRF entity-mapping more gracefully.

pull/155/head
frosch 9 years ago
parent 4a6036208a
commit 17d9b77db6

@ -160,14 +160,12 @@ static void Save_ITBL()
/** Load industry-type build data. */
static void Load_ITBL()
{
_industry_builder.Reset();
int index;
for (int i = 0; i < NUM_INDUSTRYTYPES; i++) {
index = SlIterateArray();
assert(index == i);
SlObject(_industry_builder.builddata + i, _industrytype_builder_desc);
while ((index = SlIterateArray()) != -1) {
if ((uint)index >= NUM_INDUSTRYTYPES) SlErrorCorrupt("Too many industry builder datas");
SlObject(_industry_builder.builddata + index, _industrytype_builder_desc);
}
index = SlIterateArray();
assert(index == -1);
}
extern const ChunkHandler _industry_chunk_handlers[] = {

@ -51,7 +51,7 @@ void Load_NewGRFMapping(OverrideManagerBase &mapping)
int index;
while ((index = SlIterateArray()) != -1) {
if ((uint)index >= max_id) break;
if ((uint)index >= max_id) SlErrorCorrupt("Too many NewGRF entity mappings");
SlObject(&mapping.mapping_ID[index], _newgrf_mapping_desc);
}
}

@ -1667,9 +1667,11 @@ static void SlLoadChunk(const ChunkHandler *ch)
case CH_ARRAY:
_sl.array_index = 0;
ch->load_proc();
if (_next_offs != 0) SlErrorCorrupt("Invalid array length");
break;
case CH_SPARSE_ARRAY:
ch->load_proc();
if (_next_offs != 0) SlErrorCorrupt("Invalid array length");
break;
default:
if ((m & 0xF) == CH_RIFF) {

Loading…
Cancel
Save