Fix crash of "Next Search Result" cmd on the empty search result (2nd)

Fix #15247, close #15293
pull/15303/head
Don Ho 6 months ago
parent e6a1735236
commit 6102687faf

@ -654,7 +654,7 @@ void Finder::deleteResult()
if (_scintView.execute(SCI_GETFOLDLEVEL, lno) & SC_FOLDLEVELHEADERFLAG) // delete a folder if (_scintView.execute(SCI_GETFOLDLEVEL, lno) & SC_FOLDLEVELHEADERFLAG) // delete a folder
{ {
auto endline = _scintView.execute(SCI_GETLASTCHILD, lno, -1) + 1; auto endline = _scintView.execute(SCI_GETLASTCHILD, lno, -1) + 1;
assert((size_t) endline <= _pMainFoundInfos->size()); if ((size_t)endline > _pMainFoundInfos->size()) return;
_pMainFoundInfos->erase(_pMainFoundInfos->begin() + lno, _pMainFoundInfos->begin() + endline); // remove found info _pMainFoundInfos->erase(_pMainFoundInfos->begin() + lno, _pMainFoundInfos->begin() + endline); // remove found info
_pMainMarkings->erase(_pMainMarkings->begin() + lno, _pMainMarkings->begin() + endline); _pMainMarkings->erase(_pMainMarkings->begin() + lno, _pMainMarkings->begin() + endline);
@ -667,7 +667,7 @@ void Finder::deleteResult()
} }
else // delete one line else // delete one line
{ {
assert((size_t) lno < _pMainFoundInfos->size()); if ((size_t)lno >= _pMainFoundInfos->size()) return;
_pMainFoundInfos->erase(_pMainFoundInfos->begin() + lno); // remove found info _pMainFoundInfos->erase(_pMainFoundInfos->begin() + lno); // remove found info
_pMainMarkings->erase(_pMainMarkings->begin() + lno); _pMainMarkings->erase(_pMainMarkings->begin() + lno);
@ -841,7 +841,7 @@ void Finder::gotoNextFoundResult(int direction)
auto init_lno = lno; auto init_lno = lno;
auto max_lno = _scintView.execute(SCI_GETLASTCHILD, lno, searchHeaderLevel); auto max_lno = _scintView.execute(SCI_GETLASTCHILD, lno, searchHeaderLevel);
assert(max_lno <= total_lines - 2); if (max_lno > total_lines - 2) return;
// get the line number of the current search (searchHeaderLevel) // get the line number of the current search (searchHeaderLevel)
int level = _scintView.execute(SCI_GETFOLDLEVEL, lno) & SC_FOLDLEVELNUMBERMASK; int level = _scintView.execute(SCI_GETFOLDLEVEL, lno) & SC_FOLDLEVELNUMBERMASK;
@ -950,6 +950,7 @@ void Finder::gotoNextFoundResult(int direction)
case pos_infront: case pos_infront:
{ {
lno--; lno--;
if (lno < 0) return;
anchorWithNoHeaderLines(lno, init_lno, min_lno, max_lno, direction); anchorWithNoHeaderLines(lno, init_lno, min_lno, max_lno, direction);
const SearchResultMarkingLine& newMarkingLine = *(_pMainMarkings->begin() + lno); const SearchResultMarkingLine& newMarkingLine = *(_pMainMarkings->begin() + lno);
occurrenceNumberInLine_base1 = newMarkingLine._segmentPostions.size(); occurrenceNumberInLine_base1 = newMarkingLine._segmentPostions.size();
@ -969,6 +970,7 @@ void Finder::gotoNextFoundResult(int direction)
else else
{ {
lno--; lno--;
if (lno < 0) return;
anchorWithNoHeaderLines(lno, init_lno, min_lno, max_lno, direction); anchorWithNoHeaderLines(lno, init_lno, min_lno, max_lno, direction);
const SearchResultMarkingLine& newMarkingLine = *(_pMainMarkings->begin() + lno); const SearchResultMarkingLine& newMarkingLine = *(_pMainMarkings->begin() + lno);
occurrenceNumberInLine_base1 = newMarkingLine._segmentPostions.size(); occurrenceNumberInLine_base1 = newMarkingLine._segmentPostions.size();

Loading…
Cancel
Save