From 93059830181b7167525ef4adad7d4ca3115b0701 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 26 Jun 2011 11:42:58 +0100 Subject: [PATCH] Fix a bug in Position::is_ok() If we cannot castle castleRightsMask[] could be not valid, for instance when king initial file is FILE_A as queen rook. In this case castleRightsMask[] at initialQRFile is different from the expected (ALL_CASTLES ^ WHITE_OOO). No functional change. Signed-off-by: Marco Costalba --- src/position.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/position.cpp b/src/position.cpp index bb9ec00c..42fdd62d 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -2039,14 +2039,19 @@ bool Position::is_ok(int* failedStep) const { if (can_castle_queenside(c) && piece_on(initial_qr_square(c)) != make_piece(c, ROOK)) return false; } - if (castleRightsMask[initial_kr_square(WHITE)] != (ALL_CASTLES ^ WHITE_OO)) - return false; - if (castleRightsMask[initial_qr_square(WHITE)] != (ALL_CASTLES ^ WHITE_OOO)) - return false; - if (castleRightsMask[initial_kr_square(BLACK)] != (ALL_CASTLES ^ BLACK_OO)) - return false; - if (castleRightsMask[initial_qr_square(BLACK)] != (ALL_CASTLES ^ BLACK_OOO)) - return false; + // If we cannot castle castleRightsMask[] could be not valid, for instance when + // king initial file is FILE_A as queen rook. + if (can_castle(WHITE) || can_castle(BLACK)) + { + if (castleRightsMask[initial_kr_square(WHITE)] != (ALL_CASTLES ^ WHITE_OO)) + return false; + if (castleRightsMask[initial_qr_square(WHITE)] != (ALL_CASTLES ^ WHITE_OOO)) + return false; + if (castleRightsMask[initial_kr_square(BLACK)] != (ALL_CASTLES ^ BLACK_OO)) + return false; + if (castleRightsMask[initial_qr_square(BLACK)] != (ALL_CASTLES ^ BLACK_OOO)) + return false; + } } if (failedStep) *failedStep = 0; -- 2.39.2