Fix all #29358 issues
[supertux.git] / src / worldmap / worldmap.cpp
index 3300fa8..f6be69f 100644 (file)
@@ -330,7 +330,7 @@ WorldMap::load(const std::string& filename)
     }
     current_tileset = NULL;
 
-    if(solid_tilemaps.size() == 0)
+    if(solid_tilemaps.empty())
       throw std::runtime_error("No solid tilemap specified");
 
     move_to_spawnpoint("main");
@@ -481,6 +481,10 @@ WorldMap::finished_level(Level* gamelevel)
   // TODO use Level* parameter here?
   LevelTile* level = at_level();
 
+  if(level == NULL) {
+    return;
+  }
+
   bool old_level_state = level->solved;
   level->solved = true;
   level->sprite->set_action("solved");
@@ -718,7 +722,7 @@ WorldMap::tile_data_at(Vector p)
 {
   int dirs = 0;
 
-  for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end(); i++) {
+  for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end(); ++i) {
     TileMap* tilemap = *i;
     const Tile* tile = tilemap->get_tile((int)p.x, (int)p.y);
     int dirdata = tile->getData();
@@ -1030,16 +1034,25 @@ WorldMap::save_state()
       store_bool(vm, "perfect", level->perfect);
       level->statistics.serialize_to_squirrel(vm);
 
-      sq_newslot(vm, -3, SQFalse);
+      if(SQ_FAILED(sq_newslot(vm, -3, SQFalse)))
+      {
+        throw std::runtime_error("failed to create '" + name + "' table entry");
+      }
     }
 
-    sq_newslot(vm, -3, SQFalse);
+    if(SQ_FAILED(sq_newslot(vm, -3, SQFalse)))
+    {
+      throw std::runtime_error("failed to create '" + name + "' table entry");
+    }
 
     // overall statistics...
     total_stats.serialize_to_squirrel(vm);
 
     // push world into worlds table
-    sq_newslot(vm, -3, SQFalse);
+    if(SQ_FAILED(sq_newslot(vm, -3, SQFalse)))
+    {
+      throw std::runtime_error("failed to create '" + name + "' table entry");
+    }
   } catch(std::exception& ) {
     sq_settop(vm, oldtop);
   }
@@ -1180,7 +1193,7 @@ float
 WorldMap::get_width() const
 {
   float width = 0;
-  for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end(); i++) {
+  for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end(); ++i) {
     TileMap* solids = *i;
     if (solids->get_width() > width) width = solids->get_width();
   }
@@ -1191,7 +1204,7 @@ float
 WorldMap::get_height() const
 {
   float height = 0;
-  for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end(); i++) {
+  for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end(); ++i) {
     TileMap* solids = *i;
     if (solids->get_height() > height) height = solids->get_height();
   }