Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 13 additions & 11 deletions ChessDLL/engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3037,12 +3037,15 @@ extern "C" __declspec(dllexport) long long GetDernierTempsRechercheMs()
}

string caseVersUCI(int casee) {
char col = 'a' + (casee % 8);
char rng = '1' + (casee / 8);
string s = "";
s += col;
s += rng;
return s;
// A chess square is encoded from 0 (a1) to 63 (h8). Validate the
// value before converting the numeric file/rank offsets to characters.
// The explicit casts also avoid MSVC warning C4244 (int -> char).
if (casee < 0 || casee >= 64)
return "";

const char col = static_cast<char>('a' + (casee % 8));
const char rng = static_cast<char>('1' + (casee / 8));
return string{ col, rng };
}

string coupVersUCI(int coup) {
Expand Down Expand Up @@ -3466,17 +3469,16 @@ extern "C" __declspec(dllexport) const char* GetFEN()
if (droitRoqueNoirGrand()) roque += 'q';
if (roque.empty()) roque = "-";
fen += roque;
if (caseEnPassant == -1)
if (caseEnPassant < 0 || caseEnPassant >= 64)
{
// The normal sentinel is -1. Treat any invalid value as no
// en-passant target instead of producing malformed FEN text.
fen += " -";
}
else
{
char col = 'a' + (caseEnPassant % 8);
char rang = '1' + (caseEnPassant / 8);
fen += " ";
fen += col;
fen += rang;
fen += caseVersUCI(caseEnPassant);
}
fen += " " + to_string(compteurCinquante);
fen += " " + to_string(numeroCoupComplet);
Expand Down
Loading