<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40564 >

 This patch aboids crash when saving game when ruleset defines no base types.


 - ML

diff -Nurd -X.diff_ignore freeciv/server/savegame.c freeciv/server/savegame.c
--- freeciv/server/savegame.c   2008-11-10 17:14:45.000000000 +0200
+++ freeciv/server/savegame.c   2008-11-15 00:20:48.000000000 +0200
@@ -4356,12 +4356,17 @@
   }
 
   if (has_capability("bases", savefile_options)) {
-    char **modname;
+    char **modname = NULL;
     int nmod;
     int j;
 
-    modname = secfile_lookup_str_vec(file, &nmod,
-                                    "savefile.bases");
+    nmod = secfile_lookup_int_default(file, 0, "savefile.num_bases");
+
+    if (nmod > 0) {
+      modname = secfile_lookup_str_vec(file, &nmod,
+                                       "savefile.bases");
+    }
+
     /* make sure that the size of the array is divisible by 4 */
     base_order = fc_calloc(nmod + (4 - (nmod % 4)), sizeof(*base_order));
     for (j = 0; j < nmod; j++) {
@@ -4812,19 +4817,22 @@
     free(modname);
   }
   {
-    const char **modname;
-    int i = 0;
+    secfile_insert_int(file, game.control.num_base_types, 
"savefile.num_bases");
+    if (game.control.num_base_types > 0) {
+      const char **modname;
+      int i = 0;
 
-    /* Save specials order */
-    modname = fc_calloc(game.control.num_base_types, sizeof(*modname));
+      /* Save bases order */
+      modname = fc_calloc(game.control.num_base_types, sizeof(*modname));
 
-    base_type_iterate(pbase) {
-      modname[i++] = base_rule_name(pbase);
-    } base_type_iterate_end;
+      base_type_iterate(pbase) {
+        modname[i++] = base_rule_name(pbase);
+      } base_type_iterate_end;
 
-    secfile_insert_str_vec(file, modname, game.control.num_base_types,
-                          "savefile.bases");
-    free(modname);
+      secfile_insert_str_vec(file, modname, game.control.num_base_types,
+                             "savefile.bases");
+      free(modname);
+    }
   }
 
   /* [game] */
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to