Fix all #29358 issues
[supertux.git] / src / worldmap / worldmap.cpp
index e5fba03..f6be69f 100644 (file)
@@ -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");
@@ -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);
   }