Author: sapient
Date: Mon Sep 1 12:19:50 2008
New Revision: 29159
URL: http://svn.gna.org/viewcvs/wesnoth?rev=29159&view=rev
Log:
prevent a potential crash in unit_map::clean_invalid
Modified:
trunk/src/unit_map.cpp
Modified: trunk/src/unit_map.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit_map.cpp?rev=29159&r1=29158&r2=29159&view=diff
==============================================================================
--- trunk/src/unit_map.cpp (original)
+++ trunk/src/unit_map.cpp Mon Sep 1 12:19:50 2008
@@ -28,10 +28,10 @@
typedef std::pair<std::string, std::pair<bool, std::pair<gamemap::location,
unit>*> > umap_pair;
-unit_map::unit_map(const gamemap::location &loc, const unit &u) :
+unit_map::unit_map(const gamemap::location &loc, const unit &u) :
map_(),
lmap_(),
- num_iters_(0),
+ num_iters_(0),
num_invalid_(0)
{
add(new std::pair<gamemap::location,unit>(loc, u));
@@ -41,7 +41,7 @@
/* Initialize to silence compiler warnings. */
map_(),
lmap_(),
- num_iters_(0),
+ num_iters_(0),
num_invalid_(0)
{
*this = that;
@@ -154,9 +154,9 @@
return const_unit_iterator(iter, map_);
}
-unit_map::unit_xy_iterator::unit_xy_iterator(const unit_iterator &i) :
- counter_(i.map_),
- i_(i.i_),
+unit_map::unit_xy_iterator::unit_xy_iterator(const unit_iterator &i) :
+ counter_(i.map_),
+ i_(i.i_),
map_(i.map_),
loc_(i.valid() ? i->first : gamemap::location())
{
@@ -213,17 +213,17 @@
return i_ != map_->map_.end() && i_->second.first && loc_ ==
i_->second.second->first;
}
-unit_map::const_unit_xy_iterator::const_unit_xy_iterator(const unit_iterator
&i) :
- counter_(i.map_),
- i_(i.i_),
- map_(i.map_),
- loc_(i.valid() ? i->first : gamemap::location())
-{
-}
-
-unit_map::const_unit_xy_iterator::const_unit_xy_iterator(const
const_unit_iterator &i) :
- counter_(i.map_),
- i_(i.i_),
+unit_map::const_unit_xy_iterator::const_unit_xy_iterator(const unit_iterator
&i) :
+ counter_(i.map_),
+ i_(i.i_),
+ map_(i.map_),
+ loc_(i.valid() ? i->first : gamemap::location())
+{
+}
+
+unit_map::const_unit_xy_iterator::const_unit_xy_iterator(const
const_unit_iterator &i) :
+ counter_(i.map_),
+ i_(i.i_),
map_(i.map_),
loc_(i.valid() ? i->first : gamemap::location())
{
@@ -279,17 +279,17 @@
}
-unit_map::xy_accessor::xy_accessor(const unit_iterator &i) :
- counter_(i.map_),
- i_(i.i_),
- map_(i.map_),
- loc_(i.valid() ? i->first : gamemap::location())
-{
-}
-
-unit_map::xy_accessor::xy_accessor(const unit_xy_iterator &i) :
- counter_(i.map_),
- i_(i.i_),
+unit_map::xy_accessor::xy_accessor(const unit_iterator &i) :
+ counter_(i.map_),
+ i_(i.i_),
+ map_(i.map_),
+ loc_(i.valid() ? i->first : gamemap::location())
+{
+}
+
+unit_map::xy_accessor::xy_accessor(const unit_xy_iterator &i) :
+ counter_(i.map_),
+ i_(i.i_),
map_(i.map_),
loc_(i.valid() ? i->first : gamemap::location())
{
@@ -323,33 +323,33 @@
return false;
}
-unit_map::const_xy_accessor::const_xy_accessor(const const_unit_iterator &i) :
- counter_(i.map_),
- i_(i.i_),
- map_(i.map_),
- loc_(i.valid() ? i->first : gamemap::location())
-{
-}
-
-unit_map::const_xy_accessor::const_xy_accessor(const unit_iterator &i) :
- counter_(i.map_),
- i_(i.i_),
- map_(i.map_),
- loc_(i.valid() ? i->first : gamemap::location())
-{
-}
-
-unit_map::const_xy_accessor::const_xy_accessor(const const_unit_xy_iterator
&i) :
- counter_(i.map_),
- i_(i.i_),
- map_(i.map_),
- loc_(i.valid() ? i->first : gamemap::location())
-{
-}
-
-unit_map::const_xy_accessor::const_xy_accessor(const unit_xy_iterator &i) :
- counter_(i.map_),
- i_(i.i_),
+unit_map::const_xy_accessor::const_xy_accessor(const const_unit_iterator &i) :
+ counter_(i.map_),
+ i_(i.i_),
+ map_(i.map_),
+ loc_(i.valid() ? i->first : gamemap::location())
+{
+}
+
+unit_map::const_xy_accessor::const_xy_accessor(const unit_iterator &i) :
+ counter_(i.map_),
+ i_(i.i_),
+ map_(i.map_),
+ loc_(i.valid() ? i->first : gamemap::location())
+{
+}
+
+unit_map::const_xy_accessor::const_xy_accessor(const const_unit_xy_iterator
&i) :
+ counter_(i.map_),
+ i_(i.i_),
+ map_(i.map_),
+ loc_(i.valid() ? i->first : gamemap::location())
+{
+}
+
+unit_map::const_xy_accessor::const_xy_accessor(const unit_xy_iterator &i) :
+ counter_(i.map_),
+ i_(i.i_),
map_(i.map_),
loc_(i.valid() ? i->first : gamemap::location())
{
@@ -535,11 +535,13 @@
void unit_map::clean_invalid() {
size_t num_cleaned = 0;
- umap::iterator iter;
- for (iter = map_.begin(); iter != map_.end(); ++iter) {
+ umap::iterator iter = map_.begin();
+ while (iter != map_.end()) {
if (!iter->second.first) {
- map_.erase(iter--);
- num_cleaned++;
+ map_.erase(iter++);
+ ++num_cleaned;
+ } else {
+ ++iter;
}
}
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits