diff --git a/src/kernel/save.c b/src/kernel/save.c index beda42747..fd32a567d 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -1391,6 +1391,7 @@ int readgame(const char *filename, bool backup) storage store; stream strm; FILE *F; + size_t sz; init_locales(); log_debug("- reading game data from %s\n", filename); @@ -1405,8 +1406,8 @@ int readgame(const char *filename, bool backup) perror(path); return -1; } - fread(&gdata.version, sizeof(int), 1, F); - if (gdata.version >= INTPAK_VERSION) { + sz = fread(&gdata.version, sizeof(int), 1, F); + if (sz!=sizeof(int) || gdata.version >= INTPAK_VERSION) { int stream_version; size_t sz = fread(&stream_version, sizeof(int), 1, F); assert((sz==1 && stream_version == STREAM_VERSION) || !"unsupported data format"); diff --git a/src/modules/autoseed.c b/src/modules/autoseed.c index bf56bcda9..f0af4582f 100644 --- a/src/modules/autoseed.c +++ b/src/modules/autoseed.c @@ -208,6 +208,7 @@ newfaction *read_newfactions(const char *filename) nf = calloc(sizeof(newfaction), 1); if (set_email(&nf->email, email) != 0) { log_error("Invalid email address for subscription %s: %s\n", itoa36(subscription), email); + free(nf); continue; } nf->password = _strdup(password); diff --git a/src/move.c b/src/move.c index 3124ea54c..00752c3cf 100644 --- a/src/move.c +++ b/src/move.c @@ -2189,7 +2189,7 @@ static const region_list *travel_i(unit * u, const region_list * route_begin, static void travel(unit * u, region_list ** routep) { region *r = u->region; - region_list *route_begin = NULL; + region_list *route_begin; follower *followers = NULL; assert(routep); @@ -2232,36 +2232,37 @@ static void travel(unit * u, region_list ** routep) make_route(u, u->thisorder, routep); route_begin = *routep; - /* und ab die post: */ - travel_i(u, route_begin, NULL, u->thisorder, TRAVEL_NORMAL, &followers); + if (route_begin) { + /* und ab die post: */ + travel_i(u, route_begin, NULL, u->thisorder, TRAVEL_NORMAL, &followers); - /* followers */ - while (followers != NULL) { - follower *fnext = followers->next; - unit *uf = followers->uf; - unit *ut = followers->ut; - const region_list *route_end = followers->route_end; + /* followers */ + while (followers != NULL) { + follower *fnext = followers->next; + unit *uf = followers->uf; + unit *ut = followers->ut; + const region_list *route_end = followers->route_end; - free(followers); - followers = fnext; + free(followers); + followers = fnext; - if (uf->region == r) { - order *follow_order; - const struct locale *lang = u->faction->locale; - const char *s = LOC(uf->faction->locale, parameters[P_UNIT]); - /* construct an order */ - assert(s || !"missing translation for UNIT keyword"); - follow_order = create_order(K_FOLLOW, lang, "%s %i", - s, ut->no); + if (uf->region == r) { + order *follow_order; + const struct locale *lang = u->faction->locale; + const char *s = LOC(uf->faction->locale, parameters[P_UNIT]); + /* construct an order */ + assert(s || !"missing translation for UNIT keyword"); + follow_order = create_order(K_FOLLOW, lang, "%s %i", + s, ut->no); - route_end = reroute(uf, route_begin, route_end); - travel_i(uf, route_begin, route_end, follow_order, TRAVEL_FOLLOWING, - &followers); - caught_target(uf->region, uf); - free_order(follow_order); + route_end = reroute(uf, route_begin, route_end); + travel_i(uf, route_begin, route_end, follow_order, TRAVEL_FOLLOWING, + &followers); + caught_target(uf->region, uf); + free_order(follow_order); + } } } - } void move_cmd(unit * u, bool move_on_land) diff --git a/src/spells/combatspells.c b/src/spells/combatspells.c index 4b497d689..0ee3755b3 100644 --- a/src/spells/combatspells.c +++ b/src/spells/combatspells.c @@ -1033,7 +1033,7 @@ int sp_chaosrow(struct castorder * co) if (u_race(df->unit)->battle_flags & BF_NOBLOCK) { df->side->nonblockers[row] -= df->alive; } - row = FIRST_ROW + (rng_int() % (LAST_ROW - FIRST_ROW)); + row = FIRST_ROW + (rng_int() % (NUMROWS - FIRST_ROW)); switch (row) { case FIGHT_ROW: df->status = ST_FIGHT; diff --git a/src/summary.c b/src/summary.c index 4b7e037a8..94ae0b6e7 100644 --- a/src/summary.c +++ b/src/summary.c @@ -374,7 +374,10 @@ summary *make_summary(void) s->factions++; /* Problem mit Monsterpartei ... */ if (!is_monsters(f)) { - s->factionrace[old_race(f->race)]++; + int rc = old_race(f->race); + if (rc >= 0) { + s->factionrace[rc]++; + } } } }