<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 Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev