Permalink
Browse files

Fix missing pawn color check in move_is_legal()

In case we have a correct white pawn move but pawn
is black (or the contrary) we fail to detect the
move as illegal.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
  • Loading branch information...
1 parent 5c703b7 commit 46bb6c6dc300bc5a8b819d690734ddcb1f1e4e14 @mcostalba committed May 5, 2009
Showing with 6 additions and 1 deletion.
  1. +6 −1 src/movegen.cpp
View
@@ -496,6 +496,11 @@ bool move_is_legal(const Position& pos, const Move m, Bitboard pinned) {
// Proceed according to the type of the moving piece.
if (type_of_piece(pc) == PAWN)
{
+ // Move direction must be compatible with pawn color
+ int direction = to - from;
+ if ((us == WHITE) != (direction > 0))
+ return false;
+
// If the destination square is on the 8/1th rank, the move must
// be a promotion.
if ( ( (square_rank(to) == RANK_8 && us == WHITE)
@@ -505,7 +510,7 @@ bool move_is_legal(const Position& pos, const Move m, Bitboard pinned) {
// Proceed according to the square delta between the source and
// destionation squares.
- switch (to - from)
+ switch (direction)
{
case DELTA_NW:
case DELTA_NE:

0 comments on commit 46bb6c6

Please sign in to comment.