mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 01:03:09 +00:00
Fix undefined behavior in search.
We use following line to clamp the search depth in some range: Depth d = std::clamp(newDepth - r, 1, newDepth + 1); Through negative extension its possible that the maximum value becomes smaller than the minimum value but then the behavior is undefined (see https://en.cppreference.com/w/cpp/algorithm/clamp). So replace this line with a safe implementation. Remark: We have in recent master already one line where up to 3 negative extensions are possible which could trigger this undefined behavior but this can only be happen for completed depth > 24 so its not discovered by our default bench. Recent negative extension tests by @fauzi shows then this undefined behavior with wrong bench numbers. closes https://github.com/official-stockfish/Stockfish/pull/4877 No functional change
This commit is contained in:
parent
d89217766b
commit
7970236e9e
1 changed files with 3 additions and 1 deletions
|
@ -1178,7 +1178,9 @@ moves_loop: // When in check, search starts here
|
||||||
// In general we want to cap the LMR depth search at newDepth, but when
|
// In general we want to cap the LMR depth search at newDepth, but when
|
||||||
// reduction is negative, we allow this move a limited search extension
|
// reduction is negative, we allow this move a limited search extension
|
||||||
// beyond the first move depth. This may lead to hidden double extensions.
|
// beyond the first move depth. This may lead to hidden double extensions.
|
||||||
Depth d = std::clamp(newDepth - r, 1, newDepth + 1);
|
// To prevent problems when the max value is less than the min value,
|
||||||
|
// std::clamp has been replaced by a more robust implementation.
|
||||||
|
Depth d = std::max(1, std::min(newDepth - r, newDepth + 1));
|
||||||
|
|
||||||
value = -search<NonPV>(pos, ss + 1, -(alpha + 1), -alpha, d, true);
|
value = -search<NonPV>(pos, ss + 1, -(alpha + 1), -alpha, d, true);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue