fix(addon-search): prevent infinite loop on empty reverse regex matches

Advance regex lastIndex when skipping zero-length matches during reverse
search to avoid hanging on patterns like .*?

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Daniel Imms
2026-05-25 18:02:22 -07:00
co-authored by Cursor
parent 17dd1ede33
commit 811be7b1ac
+10 -1
View File
@@ -315,6 +315,10 @@ export class SearchEngine {
const searchSubstring = searchStringLine.slice(0, offset);
while (foundTerm = searchRegex.exec(searchSubstring)) {
if (foundTerm[0].length === 0) {
if (searchRegex.lastIndex >= searchSubstring.length) {
break;
}
searchRegex.lastIndex++;
continue;
}
resultIndex = searchRegex.lastIndex - foundTerm[0].length;
@@ -364,8 +368,13 @@ export class SearchEngine {
let foundTerm: RegExpExecArray | null;
if (isReverseSearch) {
resultIndex = -1;
while (foundTerm = searchRegex.exec(searchStringLine.slice(0, offset))) {
const wholeWordSubstring = searchStringLine.slice(0, offset);
while (foundTerm = searchRegex.exec(wholeWordSubstring)) {
if (foundTerm[0].length === 0) {
if (searchRegex.lastIndex >= wholeWordSubstring.length) {
break;
}
searchRegex.lastIndex++;
continue;
}
const candidateIndex = searchRegex.lastIndex - foundTerm[0].length;