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)