Skip to content

Commit 23bbe90

Browse files
committed
out of bounds checks on terrain data
1 parent 47bc8ff commit 23bbe90

1 file changed

Lines changed: 10 additions & 3 deletions

File tree

src/Ruleset/RuleTerrain.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ MapBlock* RuleTerrain::getMapBlock(const std::string &name)
168168
MapData *RuleTerrain::getMapData(unsigned int *id, int *mapDataSetID) const
169169
{
170170
MapDataSet* mdf = 0;
171-
172-
for (std::vector<MapDataSet*>::const_iterator i = _mapDataSets.begin(); i != _mapDataSets.end(); ++i)
171+
std::vector<MapDataSet*>::const_iterator i = _mapDataSets.begin();
172+
for (; i != _mapDataSets.end(); ++i)
173173
{
174174
mdf = *i;
175175
if (*id < mdf->getSize())
@@ -179,7 +179,14 @@ MapData *RuleTerrain::getMapData(unsigned int *id, int *mapDataSetID) const
179179
*id -= mdf->getSize();
180180
(*mapDataSetID)++;
181181
}
182-
182+
if (i == _mapDataSets.end())
183+
{
184+
// oops! someone at microprose made an error in the map!
185+
// set this broken tile reference to BLANKS 0.
186+
mdf = _mapDataSets.front();
187+
*id = 0;
188+
*mapDataSetID = 0;
189+
}
183190
return mdf->getObjects()->at(*id);
184191
}
185192

0 commit comments

Comments
 (0)