From c41a93243a6215458db7467ec0d4c02138ae187f Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 13 Apr 2024 22:08:13 +0200 Subject: [PATCH] SynEdit: mitigate endless loop with regex replace and utf8. (regex does not handle utf-8). Issue #40900 (cherry picked from commit c4644e5d630539f92652f111822648d65ad2c13f) --- components/synedit/synedit.pp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index e91da9ac36..6f8d7d997e 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -8279,6 +8279,10 @@ begin //DebugLn(['TCustomSynEdit.SearchReplace FOUND ptStart=',dbgs(ptStart),' ptEnd=',dbgs(ptEnd),' ptFoundStart=',dbgs(ptFoundStart),' ptFoundEnd=',dbgs(ptFoundEnd)]); // check if found place is entirely in range ZeroLen := ptFoundStart = ptFoundEnd; + if ssoRegExpr in AOptions then begin + ptFoundStart.X := FTheLinesView.LogicPosAdjustToChar(FTheLinesView[ToIdx(ptFoundStart.Y)], ptFoundStart.X, False); + ptFoundEnd.X := FTheLinesView.LogicPosAdjustToChar(FTheLinesView[ToIdx(ptFoundEnd.Y)], ptFoundEnd.X, True); + end; if ( (not SelIsColumn) or ( (ptFoundStart.Y=ptFoundEnd.Y) and (ptFoundStart.X >= ReplaceBlockSelection.ColumnStartBytePos[ptFoundStart.Y]) and @@ -8288,7 +8292,8 @@ begin not( ZeroLen and (ptStart = ptFoundStart) and (ssoFindContinue in AOptions) and (not SelAvail) ) - ) + ) and + ( ZeroLen = (ptFoundStart = ptFoundEnd) ) then begin // pattern found