From de0e2e0be3f2be56b168a4c49a2a8b9238f85231 Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Mon, 29 Aug 2022 00:41:43 +0200 Subject: [PATCH] +fix: special not found position value in case of regex search --- src/Edit.c | 8 +++++++- src/Notepad3.c | 8 ++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index b44c4a10a..eff2d441d 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -923,6 +923,9 @@ bool EditCopyRangeAppend(HWND hwnd, DocPos posBegin, DocPos posEnd, bool bAppend pszTextW[cchTextW] = L'\0'; } } + else { + return false; + } } bool res = false; @@ -951,7 +954,7 @@ bool EditCopyRangeAppend(HWND hwnd, DocPos posBegin, DocPos posEnd, bool bAppend size_t cchNewText = cchTextW; if (pszOld && *pszOld) { - cchNewText += StringCchLen(pszOld, 0) + StringCchLen(pszSep, 0); + cchNewText += (StringCchLen(pszOld, 0) + StringCchLen(pszSep, 0)); } // Copy Clip & add line break @@ -5888,6 +5891,8 @@ static DocPos _FindInTarget(LPCWSTR wchFind, int sFlags, DocPos const len = (DocPos)WideCharToMultiByte(Encoding_SciCP, 0, wchFind, -1, chFind, COUNTOF(chFind), NULL, NULL); iPos = SciCall_SearchInTarget(len - 1, chFind); + iPos = (bFindNext ? (iPos >= stop) : (iPos <= stop)) ? -1LL : iPos; // regex search + // handle next in case of zero-length-matches (regex) ! if (iPos == start) { DocPos const nstop = SciCall_GetTargetEnd(); @@ -7721,6 +7726,7 @@ void EditMarkAll(LPCWSTR wchFind, int sFlags, DocPos rangeStart, DocPos rangeEnd }; Globals.iSelectionMarkNumber = found; Globals.iMarkOccurrencesCount = count; + assert(!bMultiSel || (SciCall_GetSelections() == count)); } observe: diff --git a/src/Notepad3.c b/src/Notepad3.c index f9bdc603b..a630819b5 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -4981,14 +4981,14 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_EDIT_SELECTALLMATCHES: { if (!Sci_IsMultiOrRectangleSelection()) { - if (!IsWindow(Globals.hwndDlgFindReplace)) { + if (IsWindow(Globals.hwndDlgFindReplace)) { + SetFindReplaceData(); // s_FindReplaceData + EditSelectionMultiSelectAllEx(Globals.hwndEdit, &s_FindReplaceData); + } else { if (SciCall_IsSelectionEmpty()) { EditSelectWordAtPos(SciCall_GetCurrentPos(), false); } EditSelectionMultiSelectAll(); - } else { - SetFindReplaceData(); // s_FindReplaceData - EditSelectionMultiSelectAllEx(Globals.hwndEdit, &s_FindReplaceData); } } }