Author: cazfi
Date: Thu Sep 15 09:06:07 2016
New Revision: 33804

URL: http://svn.gna.org/viewcvs/freeciv?rev=33804&view=rev
Log:
Fixed assert failure when loading ruleset without goods in compatibility mode.

See bug #25053

Modified:
    trunk/server/ruleset.c

Modified: trunk/server/ruleset.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/ruleset.c?rev=33804&r1=33803&r2=33804&view=diff
==============================================================================
--- trunk/server/ruleset.c      (original)
+++ trunk/server/ruleset.c      Thu Sep 15 09:06:07 2016
@@ -1057,9 +1057,7 @@
 
   section_list_destroy(sec);
 
-  if (compat->ver_game < 10) {
-    rscompat_goods_3_0();
-  } else {
+  if (compat->ver_game >= 10) {
     if (ok) {
       sec = secfile_sections_by_name_prefix(file, GOODS_SECTION_PREFIX);
 
@@ -6574,42 +6572,46 @@
   }
 
   if (ok) {
-    sec = secfile_sections_by_name_prefix(file, GOODS_SECTION_PREFIX);
-
-    goods_type_iterate(pgood) {
-      int id = goods_index(pgood);
-      const char *sec_name = section_name(section_list_get(sec, id));
-      struct requirement_vector *reqs;
-      const char **slist;
-      int j;
-
-      reqs = lookup_req_list(file, compat, sec_name, "reqs", 
goods_rule_name(pgood));
-      if (reqs == NULL) {
-        ok = FALSE;
-        break;
-      }
-      requirement_vector_copy(&pgood->reqs, reqs);
-
-      slist = secfile_lookup_str_vec(file, &nval, "%s.flags", sec_name);
-      BV_CLR_ALL(pgood->flags);
-      for (j = 0; j < nval; j++) {
-        enum goods_flag_id flag;
-
-        sval = slist[j];
-        flag = goods_flag_id_by_name(sval, fc_strcasecmp);
-        if (!goods_flag_id_is_valid(flag)) {
-          ruleset_error(LOG_ERROR, "\"%s\" good \"%s\": unknown flag \"%s\".",
-                        filename,
-                        goods_rule_name(pgood),
-                        sval);
+    if (compat->ver_game < 10) {
+      rscompat_goods_3_0();
+    } else {
+      sec = secfile_sections_by_name_prefix(file, GOODS_SECTION_PREFIX);
+
+      goods_type_iterate(pgood) {
+        int id = goods_index(pgood);
+        const char *sec_name = section_name(section_list_get(sec, id));
+        struct requirement_vector *reqs;
+        const char **slist;
+        int j;
+
+        reqs = lookup_req_list(file, compat, sec_name, "reqs", 
goods_rule_name(pgood));
+        if (reqs == NULL) {
           ok = FALSE;
           break;
-        } else {
-          BV_SET(pgood->flags, flag);
-        }
-      }
-      free(slist);
-    } goods_type_iterate_end;
+        }
+        requirement_vector_copy(&pgood->reqs, reqs);
+
+        slist = secfile_lookup_str_vec(file, &nval, "%s.flags", sec_name);
+        BV_CLR_ALL(pgood->flags);
+        for (j = 0; j < nval; j++) {
+          enum goods_flag_id flag;
+
+          sval = slist[j];
+          flag = goods_flag_id_by_name(sval, fc_strcasecmp);
+          if (!goods_flag_id_is_valid(flag)) {
+            ruleset_error(LOG_ERROR, "\"%s\" good \"%s\": unknown flag 
\"%s\".",
+                          filename,
+                          goods_rule_name(pgood),
+                          sval);
+            ok = FALSE;
+            break;
+          } else {
+            BV_SET(pgood->flags, flag);
+          }
+        }
+        free(slist);
+      } goods_type_iterate_end;
+    }
   }
 
   /* secfile_check_unused() is not here, but only after also settings section


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to