fix(search): avoid quadratic time complexity when computing fuzzy score (#32153)

(cherry picked from commit a8b6fa07c4)
This commit is contained in:
zeertzjq
2025-01-22 09:28:27 +08:00
committed by github-actions[bot]
parent 46cc8a52b2
commit f132efaefb

View File

@ -2964,6 +2964,8 @@ static int fuzzy_match_compute_score(const char *const str, const int strSz,
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE
{
assert(numMatches > 0); // suppress clang "result of operation is garbage"
const char *p = str;
uint32_t sidx = 0;
// Initialize score
int score = 100;
@ -2996,12 +2998,12 @@ static int fuzzy_match_compute_score(const char *const str, const int strSz,
// Check for bonuses based on neighbor character value
if (currIdx > 0) {
// Camel case
const char *p = str;
int neighbor = ' ';
for (uint32_t sidx = 0; sidx < currIdx; sidx++) {
while (sidx < currIdx) {
neighbor = utf_ptr2char(p);
MB_PTR_ADV(p);
sidx++;
}
const int curr = utf_ptr2char(p);