From 978dd1400f6bebe748c203aa70acbc8bb602cc5a Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 4 Nov 2015 11:57:13 +0100 Subject: [PATCH] CID 22465 Division or modulo by zero --- src/battle.c | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/battle.c b/src/battle.c index dfbdb8099..ae74077a6 100644 --- a/src/battle.c +++ b/src/battle.c @@ -300,9 +300,8 @@ fighter *select_corpse(battle * b, fighter * af) * * Untote werden nicht ausgewählt (casualties, not dead) */ { - int si, di, maxcasualties = 0; + int si, maxcasualties = 0; fighter *df; - side *s; for (si = 0; si != b->nsides; ++si) { side *s = b->sides + si; @@ -310,24 +309,26 @@ fighter *select_corpse(battle * b, fighter * af) maxcasualties += s->casualties; } } - di = (int)(rng_int() % maxcasualties); - for (s = b->sides; s != b->sides + b->nsides; ++s) { - for (df = s->fighters; df; df = df->next) { - /* Geflohene haben auch 0 hp, dürfen hier aber nicht ausgewählt - * werden! */ - int dead = dead_fighters(df); - if (!playerrace(u_race(df->unit))) - continue; + if (maxcasualties > 0) { + int di = (int)(rng_int() % maxcasualties); + side *s; + for (s = b->sides; s != b->sides + b->nsides; ++s) { + for (df = s->fighters; df; df = df->next) { + /* Geflohene haben auch 0 hp, dürfen hier aber nicht ausgewählt + * werden! */ + int dead = dead_fighters(df); + if (!playerrace(u_race(df->unit))) + continue; - if (af && !helping(af->side, df->side)) - continue; - if (di < dead) { - return df; + if (af && !helping(af->side, df->side)) + continue; + if (di < dead) { + return df; + } + di -= dead; } - di -= dead; } } - return NULL; }