patch 8.2.5114: time limit on searchpair() does not work properly
Problem: Time limit on searchpair() does not work properly.
Solution: Set the time limit once instead of for each regexp. (closes #10562)
diff --git a/src/search.c b/src/search.c
index be7f35a..e78e36b 100644
--- a/src/search.c
+++ b/src/search.c
@@ -674,10 +674,10 @@
stop_lnum = extra_arg->sa_stop_lnum;
#ifdef FEAT_RELTIME
if (extra_arg->sa_tm > 0)
- {
init_regexp_timeout(extra_arg->sa_tm);
- timed_out = &extra_arg->sa_timed_out;
- }
+ // Also set the pointer when sa_tm is zero, the caller may have set the
+ // timeout.
+ timed_out = &extra_arg->sa_timed_out;
#endif
}
@@ -1105,9 +1105,10 @@
}
while (--count > 0 && found); // stop after count matches or no match
-# ifdef FEAT_RELTIME
- disable_regexp_timeout();
-# endif
+#ifdef FEAT_RELTIME
+ if (extra_arg != NULL && extra_arg->sa_tm > 0)
+ disable_regexp_timeout();
+#endif
vim_regfree(regmatch.regprog);
if (!found) // did not find it
@@ -4859,7 +4860,7 @@
// get the fuzzy matches
ret = rettv_list_alloc(rettv);
- if (ret != OK)
+ if (ret == FAIL)
goto done;
if (retmatchpos)
{