Skip to content

Commit

Permalink
Fix crash when passing a mate/stalemate position
Browse files Browse the repository at this point in the history
Both Tablebases::filter_root_moves() and
extract_ponder_from_tt(9 were unable to handle
a mate/stalemate position.

Spotted and reported by Dann Corbit.

Added some mate/stalemate positions to bench so
to early catch this regression in the future.

No functional change.
  • Loading branch information
mcostalba committed Sep 24, 2016
1 parent 28240d3 commit 8662bdf
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 2 deletions.
9 changes: 8 additions & 1 deletion src/benchmark.cpp
Expand Up @@ -76,7 +76,14 @@ const vector<string> Defaults = {
"8/8/3P3k/8/1p6/8/1P6/1K3n2 b - - 0 1", // Nd2 - draw

// 7-man positions
"8/R7/2q5/8/6k1/8/1P5p/K6R w - - 0 124" // Draw
"8/R7/2q5/8/6k1/8/1P5p/K6R w - - 0 124", // Draw

// Mate and stalemate positions
"8/8/8/8/8/6k1/6p1/6K1 w - -",
"5k2/5P2/5K2/8/8/8/8/8 b - -",
"8/8/8/8/8/4k3/4p3/4K3 w - -",
"8/8/8/8/8/5K2/8/3Q1k2 b - -",
"7k/7P/6K1/8/3B4/8/8/8 b - -"
};

} // namespace
Expand Down
3 changes: 3 additions & 0 deletions src/search.cpp
Expand Up @@ -1596,6 +1596,9 @@ bool RootMove::extract_ponder_from_tt(Position& pos)

assert(pv.size() == 1);

if (!pv[0])
return false;

pos.do_move(pv[0], st, pos.gives_check(pv[0]));
TTEntry* tte = TT.probe(pos.key(), ttHit);

Expand Down
3 changes: 2 additions & 1 deletion src/thread.cpp
Expand Up @@ -184,7 +184,8 @@ void ThreadPool::start_thinking(Position& pos, StateListPtr& states,
|| std::count(limits.searchmoves.begin(), limits.searchmoves.end(), m))
rootMoves.push_back(Search::RootMove(m));

Tablebases::filter_root_moves(pos, rootMoves);
if (!rootMoves.empty())
Tablebases::filter_root_moves(pos, rootMoves);

// After ownership transfer 'states' becomes empty, so if we stop the search
// and call 'go' again without setting a new position states.get() == NULL.
Expand Down

1 comment on commit 8662bdf

@Stefano80
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo in the commit message, should read extract_ponder_from_tt()

Please sign in to comment.