Dear GNU Chess maintainers,
I found a division by zero issue in version 6.2.9.
File: src/frontend/players.cc
Function: rscorecompare
The function calculates score as:
ascore = (a->wins + (a->draws / 2)) / (a->wins + a->draws + a->losses);
If a player has no games (wins = draws = losses = 0), the denominator is 0,
causing division by zero.
Suggested fix:
static int rscorecompare(const void *aa, const void *bb)
{
const playerentry *a = (const playerentry *)aa;
const playerentry *b = (const playerentry *)bb;
float ascore, bscore;
int a_total = a->wins + a->draws + a->losses;
int b_total = b->wins + b->draws + b->losses;
if (a_total == 0) ascore = 0.0f;
else ascore = (a->wins + (a->draws / 2.0f)) / a_total;
if (b_total == 0) bscore = 0.0f;
else bscore = (b->wins + (b->draws / 2.0f)) / b_total;
if (ascore > bscore) return -1;
else if (bscore > ascore) return 1;
else return 0;
}
Please let me know if you need any more information.
Best regards