patch 9.1.1445: negative matchfuzzy scores although there is a match
Problem: negative matchfuzzy scores although there is a match
(Maxim Kim)
Solution: reset the score if a match has been found but the score is
negative (Girish Palya)
The fuzzy algorithm may miss some matches in long strings due to recursion
limits. As a result, the score can end up negative even when matches exist.
In such cases, reset the score to ensure it is non-negative.
fixes: ##17449
closes: #17469
Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/search.c b/src/search.c
index 14990e2..425d0d3 100644
--- a/src/search.c
+++ b/src/search.c
@@ -4413,6 +4413,10 @@
// Apply unmatched penalty
unmatched = strSz - numMatches;
score += UNMATCHED_LETTER_PENALTY * unmatched;
+ // In a long string, not all matches may be found due to the recursion limit.
+ // If at least one match is found, reset the score to a non-negative value.
+ if (score < 0 && numMatches > 0)
+ score = 0;
// Apply ordering bonuses
for (i = 0; i < numMatches; ++i)