<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40197 >
$subject, at least S2_1 affected.
Change affecting all games is in terrains_free(). Client side changes
are more protection against bad network data.
- ML
diff -Nurd -X.diff_ignore freeciv/client/packhand.c freeciv/client/packhand.c
--- freeciv/client/packhand.c 2008-01-22 03:47:26.000000000 +0200
+++ freeciv/client/packhand.c 2008-04-07 12:09:49.000000000 +0300
@@ -2459,6 +2459,9 @@
pterrain->output[o] = p->output[o];
} output_type_iterate_end;
+ if (pterrain->resources != NULL) {
+ free(pterrain->resources);
+ }
pterrain->resources = fc_calloc(p->num_resources + 1,
sizeof(*pterrain->resources));
for (j = 0; j < p->num_resources; j++) {
@@ -2488,9 +2491,12 @@
pterrain->fortress_time = p->fortress_time;
pterrain->clean_pollution_time = p->clean_pollution_time;
pterrain->clean_fallout_time = p->clean_fallout_time;
-
+
pterrain->flags = p->flags;
+ if (pterrain->helptext != NULL) {
+ free(pterrain->helptext);
+ }
pterrain->helptext = mystrdup(p->helptext);
tileset_setup_tile_type(tileset, pterrain);
diff -Nurd -X.diff_ignore freeciv/common/terrain.c freeciv/common/terrain.c
--- freeciv/common/terrain.c 2007-11-28 02:28:29.000000000 +0200
+++ freeciv/common/terrain.c 2008-04-07 12:08:56.000000000 +0300
@@ -230,8 +230,16 @@
void terrains_free(void)
{
terrain_type_iterate(pterrain) {
- free(pterrain->helptext);
- pterrain->helptext = NULL;
+ if (pterrain->helptext != NULL) {
+ free(pterrain->helptext);
+ pterrain->helptext = NULL;
+ }
+ if (pterrain->resources != NULL) {
+ /* Server allocates this on ruleset loading, client when
+ * ruleset packet is received. */
+ free(pterrain->resources);
+ pterrain->resources = NULL;
+ }
} terrain_type_iterate_end;
}
_______________________________________________
Freeciv-dev mailing list
[email protected]
https://mail.gna.org/listinfo/freeciv-dev